grep n'est probablement pas l'outil que vous voulez pour cela. Il imprimera une ligne pour chaque ligne correspondante dans chaque fichier. À moins que vous ne vouliez, par exemple, exécuter des tâches 10 fois sur un fichier de 10 lignes, grep n'est pas la meilleure façon de procéder. Utiliser find pour exécuter file sur chaque fichier de l'arborescence, puis parcourir cela pour "CRLF" vous donnera une ligne de sortie pour chaque fichier qui a des fins de ligne de style dos :
find . -not -type d -exec file "{}" ";" | grep CRLF
vous obtiendrez quelque chose comme :
./1/dos1.txt: ASCII text, with CRLF line terminators
./2/dos2.txt: ASCII text, with CRLF line terminators
./dos.txt: ASCII text, with CRLF line terminators
Utilisez Ctrl +V , Ctrl +M pour entrer un caractère de retour chariot littéral dans votre chaîne grep. Donc :
grep -IUr --color "^M"
fonctionnera - si le ^M
il y a un CR littéral que vous saisissez comme je l'ai suggéré.
Si vous voulez la liste des fichiers, vous voulez ajouter le -l
également.
Explication
-I
ignorer les fichiers binaires-U
empêche grep de supprimer les caractères CR. Par défaut, il le fait s'il décide qu'il s'agit d'un fichier texte.-r
lire tous les fichiers sous chaque répertoire de manière récursive.
Utilisation de RipGrep :
rg -l \r
-l, --files-with-matches
Only print the paths with at least one match.
https://github.com/BurntSushi/ripgrep