varios todos texto renombrar otro mover los directorio crear copiar comandos buscar archivos archivo linux bash shell unix cp

todos - ¿Copia recursiva de archivos específicos en Unix/Linux?



mover varios archivos en linux (7)

Necesito copiar todos los archivos *.jar del directorio y todos sus subdirectorios. ¿Cómo puedo hacerlo en la terminal UNIX / Linux? El comando cp -r *.jar /destination_dir no funciona.


Si desea mantener la misma jerarquía de directorios debajo del destino, puede usar

(cd SOURCE && find . -type f -name /*.jar -exec tar cf - {} +) / | (cd DESTINATION && tar xf -)

Esta forma de hacerlo, en lugar de expandir el resultado de find dentro de los "back-ticks", tiene la ventaja de poder manejar cualquier cantidad de archivos.


Si no necesita la estructura de directorios solo de los archivos jar, puede usar:

shopt -s globstar cp **/*.jar destination_dir

Si desea la estructura de directorios, puede marcar la opción cp --parents .


Si su búsqueda tiene un modificador -exec, y una opción cp -t:

find . -name "*.jar" -exec cp -t /destination_dir {} +

Si encuentra que no proporciona el "+" para la invocación en paralelo, puede usar ";" pero luego puedes omitir el -t :

find . -name "*.jar" -exec cp {} /destination_dir ";"


rsync es útil para copiar archivos locales y entre máquinas. Esto hará lo que quieras:

rsync -avm --include=''*.jar'' -f ''hide,! */'' . /destination_dir

Toda la estructura de directorios desde. se copia a / dir_destino, pero solo se copian los archivos .jar. La -a garantiza que todos los permisos y horas en los archivos permanecen sin cambios. El -m omitirá los directorios vacíos. -v es para salida detallada.

Para una ejecución en seco, agregue a -n, le dirá qué haría pero no copiará nada en realidad.


cp --parents `find -name /*.jar` destination/

de man cp :

--parents use full source file name under DIRECTORY


find . -name /*.jar | xargs cp -t /destination_dir

Suponiendo que sus nombres de archivo jar no contienen espacios, y su cp tiene la opción "-t". Si cp no puede hacer "-t"

find . -name /*.jar | xargs -I FILE cp FILE /destination_dir


tar -cf - `find . -name "*.jar" -print` | ( cd /destination_dir && tar xBf - )