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 - )