Alla linea di command Linux, vorrei copiare un insieme (molto grande) di file .txt
da una directory (e le relative sottodirectory) ad un altro.
Ho bisogno della struttura della directory per rimanere intatta e devo ignorare i file tranne quelli che terminano in .txt
.
È ansible utilizzare la ricerca e cpio per eseguire questa operazione
cd /top/level/to/copy find . -name '*.txt' | cpio -pdm /path/to/destdir (-updm for overwrite destination content.)
cd /source/path find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
cosa succede prima di copiarlo
cp -r /old/folder /new/folder
quindi vai alla nuova cartella e esegui
find . -type f ! -iname "*.txt" -delete
o semplicemente
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
Modifica: ok si desidera un command che filtri (non ho testato questo perché il mio sistema non ha il command cpio
!). Ecco where ho trovato: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files
find . -name "*.txt" | cpio -pmd0 /dest-dir
Prova prima questo perché non l'ho ancora provato. Se qualcuno avrebbe verificato, sarebbe stato fantastico.
Il modo più semplice che ha funzionato per me:
cp --parents -R jobs/**/*.xml ./backup/
una cattura è devi spostarsi nella directory "desiderata" prima che il "path genitore" sia corretto.
Assicurati inoltre che abilitate globs ricorsive in bash:
shopt -s globstar
Un altro approccio
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
Naviga nella directory:
cp '*.css' /path/to/destination
Devi spostarsi in each cartella della directory, ma è meglio di molte delle opzioni che ho visto finora.