Je dois convertir un répertoire entier en utilisant dos2unix
. Je ne suis pas en mesure de comprendre comment procéder.
333
find . -type f -print0 | xargs -0 dos2unix
Recherche récursivement tous les fichiers dans le répertoire courant et appelle ces fichiers. Commande dos2unix
find . -type f -print0 | xargs -0 dos2unix
résoudrait le problème, je pense.\;; echo Hello
find
invocation ne fait pas cette vérification (bien que ce soit assez simple à ajouter), mais lesdos2unix
sauts de fichiers binaires sont corrects.S'il s'agit d'un grand répertoire, vous pouvez envisager de l'exécuter avec plusieurs processeurs:
Cela passera 1 fichier à la fois et utilisera 4 processeurs.
la source
n
remonterais cela d'un ordre de grandeur ou deux (selon le nombre de fichiers dont nous parlons ici)Comme il m'est arrivé d'être peu satisfait par dos2unix, j'ai déployé mon propre utilitaire simple. Outre quelques avantages en termes de vitesse et de prévisibilité, la syntaxe est également un peu plus simple:
Et si vous voulez qu'il descende dans les sous-répertoires (en ignorant les répertoires cachés et les fichiers non textuels):
endlines
est disponible ici https://github.com/mdolidon/endlinesla source
dos2unix
? Vraiment curieux.dos2unix
, avec des capacités variables (certains lisent UTF32 par exemple, tandis que d'autres ne le font pas; endlines ne le fait pas). Il n'y en a qu'unendlines
, dont les capacités sont bien connues. 2 / libéral en entrée, tous ne ledos2unix
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 / ne fonctionne plus sous OSX - ce qui est moins important maintenant que le package Brew existe.Il est probablement préférable d'ignorer les fichiers et dossiers cachés, tels que
.git.
So au lieu d'utiliserfind
, si votrebash
version est assez récente ou si vous utilisezzsh
, faites simplement:Notez que pour Bash, cela nécessitera:
.... mais c'est une fonctionnalité suffisamment utile pour que vous puissiez honnêtement la mettre dans votre
.bashrc
toute façon.Si vous ne voulez pas ignorer les fichiers et dossiers cachés, mais que vous ne voulez toujours pas jouer avec
find
(et je ne vous en voudrais pas), vous pouvez fournir un deuxième argument récursif-glob pour ne faire correspondre que les entrées cachées:Notez que dans les deux cas, le glob se développera pour inclure les répertoires, vous verrez donc l'avertissement suivant (potentiellement plusieurs fois):
Skipping <dir>, not a regular file.
la source
dos2unix
alias qui affecte la façon dont les arguments sont développés. Quelle est la sortie detype dos2unix
sur votre système?**
au lieu defind
est de "sauter les fichiers et dossiers cachés, tels que.git
".dos2unix
ne voit jamais les fichiers cachés, car**
ne se développe pas pour les afficher. Si vous souhaitez exécuter automatiquementdos2unix
les fichiers et dossiers cachés, vous pouvez utiliserfind
oudos2unix ** **/.*
Le**/.*
développera uniquement les fichiers et dossiers cachés, y compris.
(le répertoire racine),..
(le répertoire parent) et toutes les autres entrées masquées du dossier actuel.dos2unix
s'imprime simplementSkipping <dir>, not a regular file.
lorsqu'il est exécuté sur un répertoire, donc il s'exécute..
et.
est sûr.) De plus, la combinaisonls
avec un glob n'est pas un bon moyen de vérifier comment le glob est développé; utiliser à laecho
place:echo **
affichera les argumentsdos2unix
reçus dedos2unix **
.**
que cela impliquait, et l'utilisation leecho
rend clair.Un cas d'utilisation courant semble être de normaliser les fins de ligne pour tous les fichiers validés dans un référentiel Git :
Gardez à l'esprit que certains fichiers (par exemple
*.sln
,*.bat
etc.) ne sont utilisés que sur les systèmes d'exploitation Windows et doivent garder laCRLF
fin:Si nécessaire, utilisez
.gitattributes
la source
Pour tous les utilisateurs de Solaris (j'utilise 5.10, peut également s'appliquer aux versions plus récentes, ainsi qu'à d'autres systèmes Unix):
dos2unix ne remplace pas par défaut le fichier, il imprimera simplement la version mise à jour sur stdout, vous devrez donc spécifier la source et la cible, c'est-à-dire le même nom deux fois:
la source
la source
J'ai eu le même problème et grâce aux messages ici, je l'ai résolu. Je savais que j'avais environ une centaine de fichiers et je devais l'exécuter uniquement pour les fichiers * .js.
find . -type f -name '*.js' -print0 | xargs -0 dos2unix
Merci à tous pour votre aide.
la source
Je pense que la manière la plus simple est:
la source
J'ai googlé cela comme un million de fois, donc ma solution est de simplement mettre cette fonction bash dans votre environnement.
.bashrc
ou.profile
ou quoiUsage
$ dos2unixd ./somepath
De cette façon, vous avez toujours la commande d'origine
dos2unix
et il est facile de se souvenir de celle-cidos2unixd
.la source
S'il n'y a pas de sous-répertoire, vous pouvez également prendre
la source
dos2unix *
c'est plus simple et sera en fait plus robuste que cela. (Il n'est généralement pas recommandé de diriger la sortie dels
, car c'est un outil de formatage et*
est plus fiable pour une utilisation programmatique.)ls
n'est pas bonne