2011-09-01 8 views

Respuesta

36
for file in /source/directory/* 
do 
    if [[ -f $file ]]; then 
     #copy stuff .... 
    fi 
done 
+6

Esto no funcionará para gran número de archivos debido a la limitación de la expansión shell – holygeek

+0

También no respetar los archivos con espacios en blanco en el nombre. –

+0

@holygeek: No, globbing (expansión del nombre de ruta) no está sujeto al máximo de 'ARG_MAX'. limitación de la longitud de la línea de comandos, porque no hay ninguna utilidad externa involucrada. Dicho esto, cualquier bucle con una gran cantidad de iteraciones en Bash será _slow_. – mklement0

20

Para listar los archivos normales en /my/sourcedir/, sin mirar de forma recursiva en subdirectorios:

find /my/sourcedir/ -type f -maxdepth 1 

Para copiar estos archivos a /my/destination/:

find /my/sourcedir/ -type f -maxdepth 1 -exec cp {} /my/destination/ \; 
7

Para expandir en poplitea's answer, no tiene que ejecutar cp para cada archivo: u SE xargs para copiar varios archivos a la vez:

find /my/sourcedir -maxdepth 1 -type f -print0 | xargs -0 cp -t /my/destination 

o

find /my/sourcedir -maxdepth 1 -type f -exec cp -t /my/destination '{}' + 
+0

'-exec ... +' es la solución más eficiente; Una cosa que vale la pena mencionar: 'cp -t' es una extensión _GNU_. – mklement0

Cuestiones relacionadas