[LINUX] Rechercher des fichiers avec le code de saut de ligne CR + LF dans le répertoire courant

Pour rechercher un fichier avec un code de saut de ligne CR + LF sous le répertoire courant sous Linux ou Cygwin, procédez comme suit.

Méthode 1

C'est la méthode utilisant grep. Vous avez spécifié -l pour afficher uniquement le nom de fichier dans grep. (Cette méthode inclut également le fichier binaire dans le résultat, mais cela peut être une recherche plus significative si vous spécifiez l'extension comme dans l'exemple 2)

Addendum (2014/06/23 19:10): Il était destiné à détecter CR + LF, mais Actuellement, les commandes suivantes vont frapper même si seul CR est utilisé. Si vous trouvez un bon moyen, corrigez-le. </ del> j'ai trouvé un bon moyen de le réparer.

Addendum (2014/06/24 15:25): J'ai pu détecter CR + LF par la méthode trouvée par elfmimi.

Exemple 1


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

Exemple 2


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

Méthode 2

Pour le moment, j'ai fait ma propre commande en langage C et je l'ai traitée (^ ー ^); (De cette façon, </ del> inclut également les fichiers binaires dans le résultat)

Comment utiliser


$ 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;
}

Méthode 3

La méthode consiste à retirer la sortie (sortie standard) lorsque la commande de fichier de Linux (ou Cygwin) est exécutée, et de sortir le nom de fichier si "avec terminateurs de ligne CRLF" est inclus. Vous pouvez exclure les fichiers binaires. (Avant de le faire dans le shell, j'ai essayé de le réaliser en utilisant les commandes en langage C pour le moment)

Comment utiliser


$ 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;
}

Edition supplémentaire

J'ai également créé une commande en langage C pour trouver un fichier avec un code de saut de ligne de LF sur Linux (ou Cygwin). Cette commande dépend également de la sortie de la commande de fichier.

Comment utiliser


$ 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

Rechercher des fichiers avec le code de saut de ligne CR + LF dans le répertoire courant
Liste tous les fichiers sous le répertoire courant ligne par ligne avec chemin complet
Rechercher des fichiers avec l'extension spécifiée
Décompressez tous les fichiers zip dans le répertoire actuel
Rechercher des fichiers volumineux sous Linux à partir de la ligne de commande
Vérifiez quel est le code de caractère pour tous les fichiers sous le répertoire Python et sortie
Commande pour le répertoire courant Python
Supprimer tous les fichiers pyc dans le répertoire spécifié
Comment lister les fichiers dans le répertoire spécifié (plusieurs conditions / recherche de sous-répertoire)
Vérifie s'il existe une chaîne de caractères spécifique pour tous les fichiers sous le répertoire Python et renvoie la ligne cible
[Boto3] Rechercher des utilisateurs Cognito avec l'API List Users
J'ai écrit le code pour la génération de phrases japonaises avec DeZero
Copiez récursivement les fichiers du répertoire directement sous le répertoire en utilisant Python
Google recherche la chaîne sur la dernière ligne du fichier en Python
Empêche la création de répertoires inutiles sous le répertoire courant lors du démarrage du projet avec Django