Copie los últimos archivos utilizados del tamaño total

Copie los últimos archivos utilizados del tamaño total

Quiero copiar los últimos archivos usados ​​(o tal vez creados) de un tamaño total a otra carpeta. ¿Es esto posible sin herramientas adicionales?

Tengo una unidad USB de cierto tamaño que es menor que el tamaño total de una carpeta. Como no puedo copiar todos los archivos al USB, me gusta copiar según el uso más reciente hasta que no quede más espacio. Idealmente, el método también admite la actualización de los archivos sin la necesidad de borrarlos todos y volver a copiarlos.

Respuesta1

Suponiendo (según la etiqueta [linux]) que tenga bashdisponible, además de los comandos staty ; sortsuponiendo además que desea sincronizar primero los archivos modificados más recientemente (consulteestadística del hombrepara otras opciones de marcas de tiempo), aquí hay un script bash que recorrerá todos los archivos en el directorio actual ( for f in *es la línea clave para eso), reuniendo sus últimas marcas de tiempo modificadas en una matriz, luego recorrerá las marcas de tiempo ordenadas y impresiones - ¡una muestra! -- comando rsync para cada archivo (actualmente tiene información de depuración de marca de tiempo adjunta como prueba).

Por supuesto, tendrás que ajustar el comando rsync para tu situación particular. Este script generará comandos rsync para cada archivo en el directorio actual; Mi sugerencia sería ejecutar estos rsync "a ciegas", dejando que los del final fallen, o ponerlos en un script para ejecutarlos por separado.

Este script no intenta optimizar la utilización del espacio del destino de ninguna manera; el único orden que realiza es la marca de tiempo de la última modificación (y el orden arbitrario de la matriz asociativa en caso de que haya varios archivos modificados en el mismo segundo). .

#!/usr/bin/env bash
declare -A times

# gather the files and their last-modified timestamp into an associative array,
# indexed by filename (unique)
for f in *
do
  [ -f "$f" ] && times[$f]=$(stat -c %Y "$f")
done

# get the times in (unique) sorted order
for times in ${times[@]}
do
  echo $times
done | sort -run | while read t
do
  # then loop through the array looking for files with that modification time
  for f in "${!times[@]}"
  do
    if [[ ${times[$f]} = $t ]]
    then
      echo rsync "$f" -- timestamp ${times[$f]}
    fi
  done
done

Respuesta2

Debe ordenar sus archivos por fecha de modificación y luego pasar los nombres en ese orden rsyncpara copiarlos. También puedes utilizarlo cpen su lugar, pero rsynces más eficiente.

Ya hay un hilo sobre cómo hacer esto en superuser.com:https://superuser.com/a/208749/554082

información relacionada