copiar archivos por fecha

copiar archivos por fecha

¿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 cpseguido del nombre del archivo que cumple las condiciones anteriores y de un literal bak/--- en la execclá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 zshporque 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 cpel comando. Para copiar varios archivos, consulteeste.

información relacionada