bash - usr - mover varios archivos en linux
Copie todos los archivos con una cierta extensión de todos los subdirectorios (4)
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?
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)
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 /;
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.