2012-03-21 8 views
18

Ho un albero di directory con molti file al suo interno. Mi piacerebbe copiare tutti quei file in una nuova directory, ma con tutti i file situati nella base della cartella.Copia ogni file dell'intera struttura di directory nel percorso di base di un altro

così ho qualcosa di simile:

images 
    ├── avatar.png 
    ├── bg.jpg 
    ├── checkbox.png 
    ├── cross.png 
    ├── datatables 
    │   ├── back_disabled.png 
    │   ├── back_enabled.png 
    │   ├── forward_disabled.png 
    │   ├── forward_enabled.png 
    │   ├── sort_asc.png 
    │   ├── sort_asc_disabled.png 
    │   ├── sort_both.png 
    │   ├── sort_desc.png 
    │   └── sort_desc_disabled.png 
    ├── exclamation.png 
    ├── forms 
    │   ├── btn_left.gif 
    │   ├── btn_right.gif 
    │   ├── checkbox.gif 
    │   ├── input 
    │   │   ├── input_left-focus.gif 
    │   │   ├── input_left-hover.gif 
    │   │   ├── input_left.gif 
    │   │   ├── input_right-focus.gif 
    │   │   ├── input_right-hover.gif 
    │   │   ├── input_right.gif 
    │   │   ├── input_text_left.gif 
    │   │   └── input_text_right.gif 
    │   ├── radio.gif 
    │   ├── select_left.gif 
    │   ├── select_right.gif 

E mi piacerebbe qualcosa di simile:

new_folder 
    ├── avatar.png 
    ├── bg.jpg 
    ├── checkbox.png 
    ├── cross.png 
    ├── back_disabled.png 
    ├── back_enabled.png 
    ├── forward_disabled.png 
    ├── forward_enabled.png 
    ├── sort_asc.png 
    ├── sort_asc_disabled.png 
    ├── sort_both.png 
    ├── sort_desc.png 
    ├── sort_desc_disabled.png 
    ├── exclamation.png 
    ├── btn_left.gif 
    ├── btn_right.gif 
    ├── checkbox.gif 
    ├── input_left-focus.gif 
    ├── input_left-hover.gif 
    ├── input_left.gif 
    ├── input_right-focus.gif 
    ├── input_right-hover.gif 
    ├── input_right.gif 
    ├── input_text_left.gif 
    ├── input_text_right.gif 
    ├── radio.gif 
    ├── select_left.gif 
    ├── select_right.gif 

Sono abbastanza sicuro che ci sia un bashcommand per questo, ma mi rifugio' L'ho trovato ancora. Hai qualche idea?

CS

risposta

12

siete alla ricerca di modi per appiattire la directory

find /images -iname '*.jpg' -exec cp --target-directory /newfolder/ {} \; 

find tutti i file iname nel caso in cui la modalità nome insensitive.
cp copia una volta a --target-directory denominato /newfolder/.
{} espandere l'elenco da find nel formato /dir/file.jpg /dir/dir2/bla.jpg.

+0

non ha funzionato per me con "cp: opzione illegale - -". La risposta di Kaz ha funzionato per me – alexey

+0

@alexey Non riesco a riprodurre il tuo errore, in quale ambiente l'hai eseguito? – cctan

+0

oh hai ragione - sto usando OSX (10.11.2) costruito in bash che è noto per essere scaduto: GNU bash, versione 3.2.57 (1) -release (x86_64-apple-darwin15) – alexey

28
find /source-tree -type f -exec cp {} /target-dir \; 
+2

avrei upvote se descrivere il _sticky risposta _a. ;) –

-2
$ cd images && cp ** new_folder/ 
+0

Questo risposta alla domanda in modo corretto. È molto simile alla soluzione sotto Zsh. Quindi, perché -1 ??? –

+0

Non copia i file nascosti BTW – Metal3d

2

Su zsh:

cp /source/**/* /destination