Come posso spostare i file in modo ricorsivo da una directory e le sue sottodirectory in un'altra directory?


30

Quale sarebbe un buon modo per spostare un tipo di file da una directory e da tutte le sue sottodirectory?

Come "sposta tutto * .ogg in / thisdir in modo ricorsivo su / somedir". Ho provato un paio di cose; il mio miglior sforzo è stato (non ancora eccezionale):

find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;

Restituiva su ogni riga prima di ogni nome di file,

mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'

Risposte:


23

È possibile utilizzare Trova con xargs per questo

find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir

-I nel comando sopra indica a xargs quale stringa di sostituzione si desidera utilizzare (altrimenti aggiunge gli argomenti alla fine del comando).

OPPURE
Nel tuo comando prova a spostare '{}' dopo il mvcomando.

find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;


1
per favore non dimenticare di fare il backup prima di provare i comandi sopra :-).
Hemant,

2
A proposito, per il primo -print0 per find e -0 per xargs dovrebbe essere usato il più possibile, per evitare spazi bianchi nei problemi di nome file.
maxschlepzig,

@maxschlepzig: buon punto. Lo modificherò.
Hemant,

2
Consiglio vivamente di utilizzare mv -iqui, quindi non rischi di sovrascrivere i file se succede qualcosa di inaspettato.
Gilles 'SO- smetti di essere malvagio' il

2
con mv di gnu core utils puoi usare mv -t <targetdir>e + invece di \;

10
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;

Hai in qualche modo scambiato gli argomenti per mv


9

In zsh o bash 4, per raccogliere tutti i *.oggfile in /somedir:

mv /thisdir/**/*.ogg /somedir

Se si desidera riprodurre la gerarchia di directory: (avviso, digitato direttamente nel browser)

rsync -a --prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir

oltre conveniente in bash
Mark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.