Comment convertir tous les fichiers EOL (DOS-> UNIX) de tous les fichiers d'un répertoire et de sous-répertoires Y a-t-il un moyen de le faire en utilisant dos2unix code>? (Je ne l'ai pas et je ne peux pas l'installer.) P>
tr -d '\ r' code> et des tuyaux? Si oui, comment? P>
6 Réponses :
Vous pouvez utiliser le drapeau Si j'étais vous, je tiens aux fichiers pour vous assurer que L'opération s'est bien passée. Ensuite, vous pouvez supprimer les fichiers temporaires lorsque vous obtenez terminé. Cela peut être fait comme si: p> -i code> de SED pour modifier les fichiers in-place:
Cela devrait gérer des noms de fichiers contenant des espaces. Ne pas ajouter de nouvelle ligne à la fin de chaque ligne car les fichiers deviennent à double espacement - ou même triple espacés (puisque vous remplacez les retours de chariot avec de nouvelles lignes)? Oui, je viens de le tester.
@ Denniswilliamson Je viens de tirer cela d'un script que j'ai au bureau sans même penser à deux fois. Maintenant, je me demande comment ces scripts fonctionnent du tout. (Cela pourrait avoir à voir avec le fait qu'ils étaient censés convertir des fichiers créés dans Microsoft Office for Mac.) La nouvelle version doit fonctionner correctement.
Avez-vous des noms de fichier sain et des noms de répertoires sans espaces, etc. en eux?
Si oui, ce n'est pas trop difficile. Si vous devez faire face à des noms arbitraires contenant de nouvelles lignes et des espaces, etc., vous devez alors travailler plus fort que cela. P>
tmp=${TMPDIR:-/tmp}/crlf.$$ trap "rm -f $tmp.?; exit 1" 0 1 2 3 13 15 find . -type f -print | while read name do tr -d '\015' < $name > $tmp.1 mv $tmp.1 $name done rm -f $tmp.? trap 0 exit 0
Notez que tr code> reconnaît effectivement
\ r code> (variantes BSD et GNU), vous pouvez donc utiliser
tr -d '\ r' code>.
Pour tous les fichiers du répertoire en cours, vous pouvez le faire avec un Perl One-Liner: perl -pi -e 'S / \ r \ n / \ n / g' * code> (volé de < Un href = "http://manavg.blogspot.com/2009/04/perl-one-liner-for-dos2unix.html" rel = "noreferrer"> ici )
Si votre recherche code> et
xargs code> prend en charge:
trouver -print0 | Xargs -0 ... code> gérera des noms de fichiers avec des espaces.
Regardez si vous utilisez cette commande sur Git i> Repository. Exclure .git code> sous-répertoire de trouver.
Vous pouvez également utiliser l'éditeur en mode batch.
Cette solution était la seule qui a fonctionné pour moi sur Mac OS X. Les autres ont été raccrochés sur divers problèmes tels que ne peuvent pas faire dans la modification suivante :./lang n'est pas un fichier régulier, <> ligne 22167. Code>
si Peut-être que Tim Pote pourrait vérifier les points ci-dessus pour les fichiers qu'il a mentionnés. P> \ r code> n'est pas suivi de
\ n code> (peut-être le cas dans les fichiers de Tim Pote): P>
\ r code> (en utilisant
tr -d code>) peut supprimer les nouvelles lignes li>
\ r code> avec
\ n code> peut ne pas causer de double / triple nouvelles lignes li>
ul>
Cela me considère comme un bon commentaire sur la réponse de Tim Pote, mais il n'est pas très clair sur la façon dont cela répond à la question.
Ceci supprime les retours de chariot de tous les fichiers du répertoire actuel et de tous les sous-répertoires, et devrait fonctionner sur la plupart des OSS de type UNIX:
grep -lIUre '\r' | xargs sed -i 's/\r//'