[LINUX] Suchen Sie im aktuellen Verzeichnis nach Dateien mit dem Zeilenvorschubcode CR + LF

Gehen Sie wie folgt vor, um eine Datei mit dem Zeilenvorschubcode CR + LF im aktuellen Verzeichnis unter Linux oder Cygwin zu finden.

Methode 1

Dies ist die Methode mit grep. Sie haben -l angegeben, um nur den Dateinamen in grep anzuzeigen. (Diese Methode enthält auch die Binärdatei im Ergebnis, kann jedoch eine aussagekräftigere Suche sein, wenn Sie die Erweiterung wie in Beispiel 2 angeben.)

Nachtrag (23.06.2014 19:10): Es war beabsichtigt, CR + LF zu erkennen, aber Derzeit werden die folgenden Befehle auch dann ausgeführt, wenn nur CR verwendet wird. Wenn Sie einen guten Weg finden, beheben Sie ihn. </ del> Ich habe einen guten Weg gefunden, dies zu beheben.

Nachtrag (24.06.2014 15:25): Ich konnte CR + LF mit der von elfmimi gefundenen Methode erkennen.

Beispiel 1


$ find . -type f | xargs grep -lzUP '\r\n'

Beispiel 2


$ find . -name "*.java" | xargs grep -lzUP '\r\n'

Methode 2

Vorerst habe ich mein eigenes Kommando in C-Sprache gemacht und mich damit befasst (^ ー ^); (Auf diese Weise enthält </ del> auch Binärdateien im Ergebnis.)

Wie benutzt man


$ gcc -o /usr/local/bin/crlf crlf.c
$ find . -type f | xargs crlf

crlf.c


#include <stdio.h>

int main(int argc, char **argv)
{
  if(argc < 2) return 1;
  int i;
  for(i=1; i<argc; i++)
    {
      FILE *fp = fopen(argv[i], "r");
      if(!fp) continue;
      int last = 0;
      int c = 0;
      while((c=fgetc(fp)) != EOF)
        {
          if(last=='\r' && c=='\n')
            {
              printf("%s\n", argv[i]);
              break;
            }
          last=c;
        }
      fclose(fp);
    }
  return 0;
}

Methode 3

Die Methode besteht darin, die Ausgabe (Standardausgabe) herauszunehmen, wenn der Dateibefehl von Linux (oder Cygwin) ausgeführt wird, und den Dateinamen auszugeben, wenn "mit CRLF-Zeilenabschlusszeichen" enthalten ist. Sie können Binärdateien ausschließen. (Bevor ich es in der Shell gemacht habe, habe ich versucht, es vorerst mithilfe von C-Sprachbefehlen zu realisieren.)

Wie benutzt man


$ gcc -o /usr/local/bin/textcrlf textcrlf.c
$ find . -type f | xargs textcrlf

textcrlf.c


#include <stdio.h>
#include <string.h>
#define MAXLEN (1024)

int main(int argc, char **argv)
{
  if(argc < 2) return 1;
  int i;
  for(i=1; i<argc; i++)
    {
      static char cmd[MAXLEN];
      sprintf(cmd, "file %s", argv[i]);
      FILE *fpin = popen(cmd, "r");
      if(!fpin) continue;
      static char line[MAXLEN];
      if(!fgets(line, MAXLEN, fpin))
        {
          pclose(fpin);
          continue;
        }
      if(strstr(line, "with CRLF line terminators"))
        {
          printf("%s\n", argv[i]);
        }
      pclose(fpin);
    }
  return 0;
}

Sonderedition

Ich habe auch einen C-Sprachbefehl erstellt, um eine Datei mit dem Zeilenvorschubcode LF unter Linux (oder Cygwin) zu finden. Dieser Befehl hängt auch von der Ausgabe des Dateibefehls ab.

Wie benutzt man


$ gcc -o /usr/local/bin/textlf textlf.c
$ find . -type f | xargs textlf

textlf.c


#include <stdio.h>
#include <string.h>
#define MAXLEN (1024)

int main(int argc, char **argv)
{
  if(argc < 2) return 1;
  int i;
  for(i=1; i<argc; i++)
    {
      static char cmd[MAXLEN];
      sprintf(cmd, "file %s", argv[i]);
      FILE *fpin = popen(cmd, "r");
      if(!fpin) continue;
      static char line[MAXLEN];
      if(!fgets(line, MAXLEN, fpin))
        {
          pclose(fpin);
          continue;
        }
      if(strstr(line, "with CR line terminators"))
        {
          ;
        }
      else if(strstr(line, "with CRLF line terminators"))
        {
          ;
        }
      else if(strstr(line, "ASCII text"))
        {
          printf("%s\n", argv[i]);
        }
      pclose(fpin);
    }
  return 0;
}

Recommended Posts

Suchen Sie im aktuellen Verzeichnis nach Dateien mit dem Zeilenvorschubcode CR + LF
Listen Sie alle Dateien im aktuellen Verzeichnis Zeile für Zeile mit vollständigem Pfad auf
Suchen Sie nach Dateien mit der angegebenen Erweiterung
Entpacken Sie alle Zip-Dateien im aktuellen Verzeichnis
Suchen Sie unter Linux über die Befehlszeile nach großen Dateien
Überprüfen Sie den Zeichencode für alle Dateien im Verzeichnis Python und geben Sie ihn aus
Befehl für das aktuelle Verzeichnis Python
Löschen Sie alle pyc-Dateien im angegebenen Verzeichnis
So listen Sie Dateien im angegebenen Verzeichnis auf (Suche nach mehreren Bedingungen / Unterverzeichnissen)
Überprüft, ob für alle Dateien im Verzeichnis Python eine bestimmte Zeichenfolge vorhanden ist, und gibt die Zielzeile aus
[Boto3] Suchen Sie mit der List Users API nach Cognito-Benutzern
Ich habe den Code für die japanische Satzgenerierung mit DeZero geschrieben
Kopieren Sie mit Python rekursiv Dateien aus dem Verzeichnis direkt unter dem Verzeichnis
Google sucht mit Python nach der Zeichenfolge in der letzten Zeile der Datei
Verhindert, dass beim Starten des Projekts mit Django unnötige Verzeichnisse unter dem aktuellen Verzeichnis erstellt werden