Estoy buscando un comando / script para permitir que los archivos modificados más recientemente (hasta) 10GB se copien a otra computadora.
Entonces, si hay 4 archivos de 4 GB cada uno, solo 2 de ellos deberían ser transferidos por la secuencia de comandos. Si hay 12 archivos de 1 GB, solo se deben transferir los 10 más recientes.
scripting
rsync
cp
synchronization
exussum
fuente
fuente
Respuestas:
Aquí hay un script que hace justo lo que pediste.
Los requisitos
Los detalles
Se utiliza
rsync --dry-run
para crear una lista de archivos que se transferirán (estos son los archivos modificados). Luego usa una combinación dedu
yls
para obtener tamaños de archivo y mtime. Luego ordena los archivos por mtime y luego los repite hasta que el tamaño total excede un umbral. Finalmente, vuelve a llamar a rsync con solo los archivos modificados más recientemente y con el tamaño total por debajo del umbral.El guión es un poco feo, pero funciona. Una gran limitación es que debe ejecutarse en la máquina que contiene el directorio rsync. Se puede modificar para usar ssh para usar un directorio remoto desde, pero ese exceso se deja al lector.
Finalmente, las
rsync
opciones están codificadas en el script, pero este es un cambio fácil si desea especificarlas en la línea de comandos. Además, la matemática para calcular el tamaño se realiza en bytes. Esto se puede cambiar a kilo / mega / gigabytes modificando la llamada a du y reduciendo el umbral en el mismo factor.Uso
donde
rsync-from-directory
es un directorio local yrsync-to-directory
es cualquier directorio local o remoto. Las opciones predeterminadas están codificadas como-avz
y el umbral predeterminado está codificado como10GiB
.La secuencia de comandos
fuente
if (( "$size" > "$THRESHOLD" ))
condicional, agregue una marca (antesbreak
) parai==0
y, de ser asíecho $f >> /tmp/rsyncfilelist
,.Me gustaría utilizar rsync "dry-run" (o "-n") para obtener la lista de los archivos más recientes. Luego usaría otro rsync con la opción "--files-from = -" para enviar los archivos. En el medio hay perl "feo" .
Algo como esto :
Tenga en cuenta que no probé con más de 10 GB, tal vez Perl se desbordará en algún límite; para resolver eso, en lugar de contar bytes, use Kbytes:
EDITAR: Noté que esta primera solución no ordenaría el archivo por mtime , aquí hay una solución más completa (similar al script bash que ha sido publicado por otra persona).
fuente
Puede analizar la salida ordenada de
du
. Suponiendo utilidades GNU:POSIXY, suponiendo que ningún nombre de archivo contenga un carácter de nueva línea:
Tenga en cuenta que
du
atraviesa subdirectorios. Para evitar eso, indique endu
qué archivos desea operar. De manera más general, puede usarfind
para filtrar archivos.fuente
rsync
lugar decp
.