
¿Cómo puedo copiar archivos en una carpeta según la última vez que se editó el archivo? Digamos que quiero copiar todos mis archivos queúltima edición hoydeC:a mi carpetahornear. ¿Cómo puedo lograr eso?
Sé que un comando de copia normal se puede realizar así:
cp source destination
p.ej.
cp *.c bak
¿Alguna sugerencia?
Respuesta1
Usando buscar, los archivos (y solo los archivos) modificados en el último día se encuentran mediante:
find . -type f -mtime 1
para que puedas copiarlos con
find . -type f -mtime 1 -exec cp {} bak/ \;
Significado: busca todas las entidades en el directorio actual ( .
), de tipo "archivo" ( -type f
),modificado al menos dentro de 1 día( -mtime 1
, pero es sutil, sigue el enlace para saber más), y para cada uno de ellos ejecuta el comando cp
seguido del nombre del archivo que cumple las condiciones anteriores y de un literal bak/
--- en la exec
cláusula, el punto y coma de cierre ( escapó para evitar que el caparazón se lo coma) cierra el comando y además significa que el comando debe ejecutarse una vez por cada coincidencia.
Tenga en cuenta que el árbol de directorios se aplanará en la bak/
carpeta, por lo que tal vez sería mejor usar un formato de archivo.
Por ejemplo, este es mi script que hace una copia de seguridad de todos los archivos en mis directorios de trabajo modificados hoy y desde hace dos días en archivos tar y luego los mueve a mi directorio de Dropbox:
#! /bin/zsh
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here
rm -f $today $twodays
echo -n "Starting today and twodays backups... "
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:"
ls -lh $today $twodays
echo "Moving to Dropbox"
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status
es necesario zsh
porque soy vago y no intenté adaptarme a la estructura de matriz de bash
, pero seguramente alguien aquí puede hacer eso (pista, pista)...
Respuesta2
Primero puede especificar qué archivo modificó por última vez en su carpeta actual con el comando
ls -lt
O desea especificar a qué archivo accede por última vez con el comando
ls -ltu
Después de eso, puedes copiar el archivo con cp
el comando. Para copiar varios archivos, consulteeste.