2010-02-09 1 views

risposta

21

reale soluzione testata:

$ find . -type f \! -path \*/\.svn/\* -exec dos2unix {} \; 
+0

grazie, ha funzionato bene per me. –

-1

In bash

for fic in **/*; dos2unix $fic 

O ancora meglio in zsh

for fic in **/*(.); dos2unix $fic 
+1

Come funziona questo salto .svn/'' directory? –

+0

se dotglob è spento, salterà i file nascosti. Ma verranno saltati anche altri file nascosti, che penso non sia quello che l'OP vuole. – ghostdog74

+0

Oooops, mi dispiace! per root in {*,. *} (N); do [[$ root = .svn]] && continua; per fic in $ root/**/* (.); do dos2unix $ fic; done ; funziona ma la versione di ricerca è migliore ora ... – yogsototh

1

solo offrendo un ulteriore suggerimento: tubazioni il risultato attraverso xargs invece di utilizzare l'opzione -exec di find aumenta le prestazioni quando si passa attraverso una grande struttura di directory se il programma di filtraggio accetta più argomenti, poiché questo ridurrà il numero di fork(), quindi:

trovare <opts> | xargs dos2unix

Un avvertimento: i collegamenti tramite xargs falliranno in modo anomalo se i nomi di file includono spazi vuoti.

+2

' trova ... -print0 | xargs -0 ... 'gestisce i nomi di file con spazi. –

-1
find . -path ./.svn -prune -o -print0 | xargs -0 -i echo dos2unix "{}" "{}" 

se avete bash 4,0

shopt -s globstar 
shopt -s dotglob 
for file in /path/** 
do 
    case "$file" in 
    */.svn*)continue;; 
    esac 
    echo dos2unix $file $file 
done 
+0

Anche questo sembra non funzionare. –

+0

Cambiare -path ./.svn in -path '* /. Svn' dovrebbe risolverlo. – Juris

+0

'-i' è deprecato, usa invece' -I {} '. Inoltre, perché due '" {} "'? –

2

Ecco uno script generale su cui è possibile modificare l'ultima riga come richiesto. Ho preso la tecnica dal mio script findrepo:

repodirs=".git .svn CVS .hg .bzr _darcs" 
for dir in $repodirs; do 
    repo_ign="$repo_ign${repo_ign+" -o "}-name $dir" 
done 

find \(-type d -a \($repo_ign \) \) -prune -o \ 
    \(-type f -print0 \) | 
xargs -r0 \ 
dos2unix