408 votes

Comment puis-je exécuter dos2unix sur tout un répertoire?

Je dois convertir tout un répertoire en utilisant dos2unix. Je n'arrive pas à comprendre comment faire cela.

1 votes

Ceci est le sujet d'une question meta.

747voto

CyberDem0n Points 4174

find . -type f -print0 | xargs -0 dos2unix

Recherchera de manière récursive tous les fichiers à l'intérieur du répertoire actuel et appellera la commande dos2unix pour ces fichiers

99 votes

Cela se casserait si vous aviez des espaces dans le nom de fichier. find . -type f -print0 | xargs -0 dos2unix résoudrait le problème je pense.

1 votes

J'ai donné comme ça find . -type f -exec dos2unix {} /home/venuk/Desktop/NEO_Src et cela a donné l'erreur find: argument manquant pour `-exec'

0 votes

Type f = Just 'F' fichiers et non des répertoires par exemple!

91voto

nikc Points 354

Si c'est un répertoire volumineux, vous voudrez peut-être envisager de l'exécuter avec plusieurs processeurs :

find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix 

Cela passera 1 fichier à la fois et utilisera 4 processeurs.

1 votes

Cette méthode a l'avantage de continuer même si dos2unix rencontre des problèmes! Quelque chose comme une méthode "--force". Merci pour ça!

0 votes

Wow - vient de me sauver beaucoup de temps de résolution de problèmes en essayant de convertir des ajouts de code de développeurs Windows qui avaient été ajoutés à git incorrectement. Merci!!

5 votes

Démarrer un nouveau processus dos2unix pour chaque fichier individuel introduira des surcharges massivement inutiles. Je ferais grimper ce n d'un ordre de grandeur ou deux (selon le nombre de fichiers dont nous parlons ici)

28voto

Mathias Dolidon Points 417

Comme je n'étais pas entièrement satisfait de dos2unix, j'ai mis en place ma propre utilitaire simple. Outre quelques avantages en termes de vitesse et de prévisibilité, la syntaxe est aussi un peu plus simple :

endlines unix *

Et si vous souhaitez qu'il descendre dans les sous-répertoires (en sautant les dossiers cachés et les fichiers non texte) :

endlines unix -r .

endlines est disponible ici https://github.com/mdolidon/endlines

1 votes

C'est parfait! Le plus proche que j'ai pu obtenir de cette ligne est ici : unix.stackexchange.com/a/365679/112190

4 votes

Comment cela améliore-t-il le dos2unix? Genuinement curieux.

3 votes

1/ Principalement, il existe des tonnes de différents dos2unix, avec des capacités variables (certains lisent par exemple en UTF32, tandis que d'autres ne le font pas ; les fins de ligne ne le sont pas). Il n'y a qu'un seul endlines, dont les capacités sont bien connues. 2/ tolérant à l'entrée, tous les dos2unix ne le sont pas. 3/ exploration efficace de l'arborescence des fichiers, conçue pour être rapide et pratique sur des dizaines de milliers de fichiers. 4/ fonctionne immédiatement sur OSX - ce qui est moins important maintenant que le package Brew existe.

7voto

Brett Points 11

Pour tous les utilisateurs de Solaris (j'utilise la version 5.10, cela peut s'appliquer aux versions plus récentes également, ainsi qu'à d'autres systèmes Unix) :

dos2unix ne remplace pas le fichier par défaut, il se contente d'afficher la version mise à jour sur la sortie standard, vous devrez donc spécifier la source et la cible, c'est-à-dire le même nom deux fois :

find . -type f -exec dos2unix {} {} \;

-1voto

Si aucun sous-répertoire n'existe, vous pouvez également exécuter

ls | xargs -I {} dos2unix "{}"

5 votes

S'il n'y a pas de sous-dossiers, dos2unix * est plus simple et en fait plus robuste que cela. (Généralement, il n'est pas recommandé de rediriger la sortie de ls, car c'est un outil de mise en forme et * est plus fiable pour une utilisation programmatique.)

1 votes

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X