Cuando ejecuto el comando find . -mtime -60
Obtengo la lista de archivos modificados en los últimos 60 días.
Entonces, cuando ejecuto find . -mtime -60 -exec cp {} /tmp/1 \;
Puedo copiar estos archivos a un nuevo directorio para su procesamiento
Sin embargo, si quiero conservar las marcas de tiempo, no puedo copiar solo los archivos necesarios cuando ejecuto find . -mtime -60 -exec cp -LR --preserve=timestamps {} /tmp/2 \;
Lo que termina sucediendo es que TODOS los archivos en el directorio de origen se copian en lugar de solo los archivos que necesito.
¿Alguna solución aquí?
Respuesta aceptada:
Lo que sucede aquí es que cuando usas -R
opción a cp
y proporciona un directorio como argumento, copia todo en ese directorio. Además, esto no preservará la estructura del directorio, ya que los archivos de los directorios inferiores se copiarán directamente en /tmp/2
. . Esto puede ser lo que desea (consulte la respuesta de X Tian sobre cómo hacerlo de esta manera), pero tenga cuidado si algún archivo tiene el mismo nombre, uno sobrescribirá al otro en la destino.
Para conservar la estructura del directorio, puede usar cpio
:
find . -mtime -60 -print0 | cpio -0mdp /tmp/2
Si el -0
(o equivalente) no está disponible, puede hacerlo, pero tenga cuidado de que ninguno de sus nombres de archivo contenga una nueva línea:
find . -mtime -2 | cpio -mdp /tmp/2
cpio
también debe admitir -L
opción, aunque ojo con esto ya que en algunos casos puede provocar un bucle infinito.