
Este es el comando que estoy usando:
find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;
Estoy intentando copiar muchos directorios de un directorio a otro directorio, pero solo los creados en las últimas 2 horas.
Sin embargo, mi comando no funciona y realmente no entiendo por qué, si no es obvio, no soy un usuario de Linux con mucha experiencia. Por lo que obtengo cp
parece interpretar mi destino previsto como la fuente.
Incluso intenté usarlo xargs
y lo entiendo aún menos.
Usando Bash en Debian Squeezy y ejecutando el comando en root.
Respuesta1
Por lo que obtengo
cp
parece interpretar mi destino previsto como la fuente.
Sí, lo es. Esto se debe a que la sintaxis general de Linux/Unix es algo como esto:
[some command] [some command options] [source item] [destination item]
Así que mira tu comando:
find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;
Eso cp -f absolute-destination {}
es al revés, ya que {}
representa el archivo fuente encontrado por find
comando y el “destino absoluto” es exactamente lo que es; un destino. Entonces esa parte del comando debería reescribirse como cp -f {} absolute-destination
.
Además:
- Esto
-name "*"
es redundante y superfluo si de todos modos busca todos los archivos en función del tiempo; lo que significa que puedes deshacerte de eso. - Además, el uso de
amin
es un poco confuso ya que-amin -120
significa “el archivo ha sidoaccedidoen los últimos 120 minutos”. Si quieres actuar sobre elcreaciónhora de los archivos, debería cambiarse acmin
—también conocido como: cambiadon
hace minutos— en su lugar; más detalles en Linuxfind
página de manual.
Entonces el comando final sería:
find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;
Pero antes de ejecutar ese cp
comando siempre debes hacer un "ejecución en seco" usando echo
para ver exactamente qué está sucediendo de esta manera:
find absolute-path -cmin -120 -exec echo {} \;
Recuerde, hacer una prueba de "ejecución en seco" de un comando como esteantesejecutar el comando real/final le ahorrará dolores de cabeza a largo plazo. Especialmente si planeas ejecutar el comando como root
.
Nunca se sabe si es posible que haya cometido un error simple e involuntario en su lógica de comando que podría arruinarse de manera inesperada. Y apresurar un comando mal estructurado a “producción” sin realizar pruebas puede ahorrarle unos minutos al principio, pero luego podría resultar en horas (y en algunos casos, días) de trabajo de limpieza.Siemprevaya a lo seguro cuando trabaje en la línea de comando.