Actuellement, j'utilise la commande suivante pour changer les fins de ligne de dos2unix, mais c'est pour fichier-y fichier..est-il possible d'exécuter cette commande pour tous les fichiers d'un répertoire
sed -i 's/\r//' filename to convert dos2unix line endings
Merci,
for i in `find . -type f \( -name "*.c" -o -name "*.h" \)`; do sed -i 's/\r//' $i ; done
La méthode la plus simple pour exécuter dos2unix
sur un répertoire entier de manière récursive consiste simplement à l'exécuter pour la commande find
pour chaque fichier trouvé en fonction de vos critères.
Par exemple, pour rechercher tous les fichiers (à l’exclusion des noms de répertoire) dans votre répertoire actuel et tous ses sous-répertoires et pour que dos2unix
effectue la conversion par défaut sur chacun de ces fichiers:
find . -type f -exec dos2unix -k -s -o {} ';'
Cela produira chaque nom de fichier, mais ne changera pas nécessairement chacun d'entre eux. Cela fonctionne comme suit:
find .
: Tout ce qui se trouve dans ce répertoire, y compris ses sous-répertoires, ainsi que tout ce qui se trouve dans ces sous-répertoires (récursivité)-type f
: Renvoie uniquement les noms de «fichiers normaux». Exclure les noms de dossiers des résultats.-exec
: Exécutez la commande suivante pour chaque résultat. Tout ce qui dépasse ce point doit être traité comme faisant partie de cette commande jusqu'à ce que le caractère ;
soit trouvé.dos2unix
: dos2unix
sera exécuté avec les options suivantes ...-k
: conserve l'horodatage du fichier de sortie identique à celui du fichier d'entrée-s
: Ignore les fichiers binaires (images, archives, etc.). Cette option est incluse par défaut, mais je l'utilise quand même au cas où les valeurs par défaut seraient différentes sur certains systèmes (par exemple, OS X v. Debian v. CentOS v. Ubuntu v. ...).-o
: écrivez les modifications directement dans le fichier, plutôt que de créer un nouveau fichier avec les données au nouveau format.{}
: Ceci indique à find
d'insérer le nom de fichier trouvé en tant que paramètre de l'appel dos2unix
.';'
: Dites à find
que les paramètres pour dos2unix
ont pris fin. Tout ce qui est au-delà de ce point sera à nouveau traité comme un paramètre de find
.
Une autre option: find your_dir type f -exec sed -i 's/\r//' {} \;
Pourquoi n'utilisez-vous pas la commande dos2unix? Si vous faites juste le sed ci-dessus, il peut y avoir des fichiers (selon leur source) qui auront un EOF incorrect (vous pouvez le voir si vous exécutez cat et que l'invite est ensuite concaténée dans la sortie du fichier)
dos2unix *.txt
fonctionne bien pour convertir tous les fichiers * .txt dans un répertoire ... pas besoin de la commande 'find'.
Simple:
sed -i 's/\r//' filename1 filename2 … filenameN
ou, si vous parlez du contenu d'un répertoire
sed -i 's/\r//' *
Travaille juste bien pour moi.
Je viens d'ajouter une autre référence ...
Sur Ubuntu 14.04, la page man dos2unix
fournit cet exemple, en particulier pour la conversion récusive:
find . -name *.txt | xargs dos2unix
Citant la page de manuel, cela va
... convertir tous les fichiers .txt de l’arborescence sous le .__ actuel. répertoire ...
utilisation
for i in `ls directory_path`; do sed -i 's/\r//' $i ; done
pour tout le répertoire.
find $(pwd) -type f | xargs -I xxx sed -i 's/\r//g' xxx