C'è un modo per applicare il dos2unix
comando in modo che venga eseguito su tutti i file in una cartella e nelle sue sottocartelle?
man dos2unix
non mostra alcuna -r
o simili opzioni che lo renderebbero semplice?
C'è un modo per applicare il dos2unix
comando in modo che venga eseguito su tutti i file in una cartella e nelle sue sottocartelle?
man dos2unix
non mostra alcuna -r
o simili opzioni che lo renderebbero semplice?
Risposte:
Saltare binari e file nascosti era importante per me:
Questo ha funzionato bene per me:
find . -type f -not -path '*/\.*' -exec grep -Il '.' {} \; | xargs -d '\n' -L 1 dos2unix -k
Il che si traduce in: trova tutti i file non nascosti in modo ricorsivo nella directory corrente, quindi usa grep, elenca tutti i file non binari (-I) non vuoti, quindi esegui il pipe in xargs (delimitato da newline) un file alla volta per dos2unix e mantieni il timestamp originale.
Guarda anche:
È possibile utilizzare find per trovare tutti i file in una struttura di directory che si desidera eseguire tramite il comando dos2unix
find /path/to/the/files -type f -exec dos2unix {} \;
Dai un'occhiata alle pagine man per trovare, ci sono molte opzioni che puoi usare per specificare cosa viene valutato
Usa un carattere jolly. In questo modo: (Se sei nella cartella)
dos2unix *
o se sei fuori dalla cartella fai:
dos2unix /path/to/folder/*
Utilizzando bash
:
shopt -s globstar
dos2unix **
L' globstar
opzione shell in bash
abilita l'uso del **
glob. Funziona esattamente come, *
ma /
corrisponde ai nomi dei percorsi (quindi anche alla corrispondenza dei nomi nelle sottodirectory). Funzionerebbe in una directory contenente un numero moderato di file nelle sue sottodirectory (non molte migliaia).
Nelle shell zsh
e yash
(con set -o extended-glob
in yash
), lo faresti
dos2unix **/*
dos2unix
salta i binari per impostazione predefinita.