2012-03-21 7 views
18

Tengo un árbol de directorios con muchos archivos. Me gustaría copiar todos esos archivos en un nuevo directorio, pero con todos los archivos ubicados en la base de la carpeta.Copie todos los archivos de la estructura de directorios completa en la ruta base de otro

Así que tener algo como esto:

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 

y me gustaría algo como esto:

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 

Estoy bastante seguro de que es un bashcommand por eso, pero no he lo encontré todavía ¿Tienes alguna idea?

CS

Respuesta

12

que busca maneras de aplanar el directorio

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

find todos los archivos en caso de que el modo de iname nombre insensibles.
cp copia una vez a --target-directory llamado /newfolder/.
{} ampliar la lista de find en la forma de /dir/file.jpg /dir/dir2/bla.jpg.

+0

no funcionó para mí con "cp: opción ilegal - -". La respuesta de Kaz funcionó para mí – alexey

+0

@alexey No puedo reproducir su error, ¿en qué entorno lo ejecutó? – cctan

+0

oh tienes razón, estoy usando OSX (10.11.2) built in bash que se sabe que está desactualizado: GNU bash, versión 3.2.57 (1) -release (x86_64-apple-darwin15) – alexey

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

Me upvote si describe su respuesta bit_ _a. ;) –

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

This respuesta de la solución a la pregunta correctamente. Ella es muy similar a la solución bajo Zsh. Entonces, ¿por qué -1? –

+0

No copia archivos ocultos BTW – Metal3d

2

En zsh:

cp /source/**/* /destination

Cuestiones relacionadas