Comment appliquer dos2unix récursivement à tout le contenu d'un dossier?

11

Existe-t-il un moyen d'appliquer la dos2unixcommande afin qu'elle s'exécute sur tous les fichiers d'un dossier et de ses sous-dossiers? man dos2unixn'affiche aucune -roption similaire qui rendrait cela simple?

Alex Kinman
la source

Réponses:

18

find /path -type f -print0 | xargs -0 dos2unix --

Stefan Paletta
la source
2
Ne vous inquiétez pas, dos2unixignore les binaires par défaut.
Walf
3

Ignorer les binaires et les fichiers cachés était important pour moi:

Celui-ci a bien fonctionné pour moi:

find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -d '\n' -L 1 dos2unix -k

Cela se traduit par: rechercher tous les fichiers non masqués de manière récursive dans le répertoire courant, puis en utilisant grep, lister tous les fichiers non vides (-I) non binaires, puis les rediriger en xargs (délimités par des sauts de ligne) un fichier à la fois pour dos2unix et conservez l'horodatage d'origine.

Voir également:

https://github.com/mdolidon/endlines

phyatt
la source
2

Vous pouvez utiliser find pour rechercher tous les fichiers dans une structure de répertoires que vous souhaitez exécuter via votre commande dos2unix

find /path/to/the/files -type f -exec dos2unix {} \;

Jetez un œil aux pages de manuel pour trouver, il y a beaucoup d'options que vous pouvez utiliser pour spécifier ce qui sera évalué

Jay Jay
la source
Ça n'a pas marché.
Alex Kinman
2
Soyez très prudent en exécutant cela s'il y a un répertoire .git n'importe où dans l'arborescence des fichiers ... cela a corrompu mon référentiel git local.
Aaron_H
1

Utilisez un caractère générique. Comme ceci: (Si vous êtes dans le dossier)

dos2unix *

ou si vous êtes en dehors du dossier, faites:

dos2unix /path/to/folder/*
Afficher un nom
la source
1

En utilisant bash:

shopt -s globstar
dos2unix **

L' globstaroption shell dans bashpermet d'utiliser le **glob. Cela fonctionne exactement comme *mais correspond à travers /dans les chemins d'accès (d'où la correspondance des noms dans les sous-répertoires aussi). Cela fonctionnerait dans un répertoire contenant un nombre modéré de fichiers dans ses sous-répertoires (pas plusieurs milliers).

Dans les coquilles zshet yash(avec set -o extended-globin yash), vous feriez

dos2unix **/*
Kusalananda
la source