![usando find, exec y cp para copiar archivos específicos conservando la ruta del directorio](https://rvso.com/image/747354/usando%20find%2C%20exec%20y%20cp%20para%20copiar%20archivos%20espec%C3%ADficos%20conservando%20la%20ruta%20del%20directorio.png)
Configuré las siguientes carpetas con archivos de texto vacíos:
1/a.txt
2/b.txt
Quiero copiar solo archivos txt a otro directorio manteniendo su estructura de directorios. Entonces probé los siguientes comandos:
mkdir -p temp/s;
find ./ -name '*txt' -exec cp --parents '{}' ./temp/s \;
Ahora veo los siguientes archivos de mi directorio actual:
1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt
temp/s/temp/s/2/b.txt
No entiendo por qué temp/s/temp/s/2/b.txt
apareció la línea final. ¿Alguien puede explicarme por qué sucedió eso y cómo puedo arreglar mi comando para que temp
no esté anidado dentro de otro temp
?
Este es el resultado final que esperaba:
1/a.txt
2/b.txt
temp/s/1/a.txt
temp/s/2/b.txt
Respuesta1
Usted tiene uncondición de carrera: ya que temp/s
está en find
la ruta de búsqueda de , find
enumera archivos, mientras que los cp
s generados agregan nuevos archivos.
Debe excluir el subdirectorio mientras ejecuta find
:
find . -path ./temp/s -prune -o -name '*txt' -exec cp --parents '{}' ./temp/s \;
Tenga en cuenta que reemplazar \;
con +
generará muchos menos cp
procesos.