bash varios Copie todos los archivos con una cierta extensión de todos los subdirectorios




renombrar archivo linux (4)

También tuve que hacer esto yo mismo. Lo hice a través del argumento --parents para cp:

find SOURCEPATH -name filename*.txt -exec cp --parents {} DESTPATH \;

Bajo Unix, quiero copiar todos los archivos con una cierta extensión (todos los archivos de Excel) desde todos los subdirectorios a otro directorio. Tengo el siguiente comando:

cp --parents `find -name \*.xls*` /target_directory/

Los problemas con este comando son:

  • Copia también la estructura del directorio, y solo quiero los archivos (por lo que todos los archivos deberían terminar en / target_directory /)

  • No copia archivos con espacios en los nombres de archivo (que son bastantes)

Alguna solución para estos problemas?


Tuve un problema similar. Lo resolví usando:

find dir_name '*.mp3' -exec cp -vuni '{}' "../dest_dir" ";"

El '{}' y el ";" ejecuta la copia en cada archivo.


--parents está copiando la estructura del directorio, por lo que debes deshacerte de eso.

La forma en que ha escrito esto, el find ejecuta, y el resultado se coloca en la línea de comando de manera que cp no puede distinguir entre los espacios que separan los nombres de archivo y los espacios dentro del nombre del archivo. Es mejor hacer algo como

$ find . -name \*.xls -exec cp {} newDir \;

en el que cp se ejecuta para cada nombre de archivo que find hallazgos, y pasó el nombre de archivo correctamente. Aquí hay más información sobre esta técnica.

En lugar de todo lo anterior, puedes usar zsh y simplemente escribir

$ cp **/*.xls target_directory

zsh puede expandir comodines para incluir subdirectorios y hace que este tipo de cosas sea muy fácil.


De todo lo anterior, se me ocurrió esta versión. Esta versión también funciona para mí en el terminal de recuperación mac.

find ./ -name '*.xsl' -exec cp -prv '{}' '/path/to/targetDir/' ';'

Se verá en el directorio actual y recursivamente en todos los subdirectorios para archivos con la extensión xsl. Los copiará todos al directorio de destino.

banderas cp son:

  • p - preserva los atributos del archivo
  • r - recursivo
  • v - verboso (muestra lo que se está copiando)






cp