Я ищу команду / скрипт, позволяющий копировать последние измененные файлы (до 10 ГБ) на другой компьютер.
Таким образом, если имеется 4 файла по 4 ГБ каждый, только 2 из них должны быть переданы сценарием. Если существует 12 файлов размером 1 ГБ, должны быть переданы только самые последние 10 файлов.
scripting
rsync
cp
synchronization
exussum
источник
источник
Ответы:
Вот скрипт, который делает именно то, что вы просили.
Требования
Детали
Он использует
rsync --dry-run
для создания списка файлов, которые будут переданы (это измененные файлы). Затем он использует комбинациюdu
и,ls
чтобы получить размеры файлов и mtime. Затем он сортирует файлы по mtime, а затем перебирает их, пока общий размер не превысит пороговое значение. Наконец, он снова вызывает rsync только с файлами, которые были недавно изменены и имеют общий размер ниже порогового значения.Сценарий немного уродлив, но работает. Одно большое ограничение заключается в том, что он должен выполняться на машине, содержащей директорию rsync from. Его можно изменить, чтобы использовать ssh для использования удаленного директории from, но этот размер оставляется читателю.
Наконец,
rsync
параметры жестко запрограммированы в скрипте, но это легко изменить, если вы хотите указать их в командной строке. Также математика для вычисления размера выполняется в байтах. Это можно изменить на килограмм / мега / гигабайт, изменив вызов du и уменьшив порог на тот же коэффициент.Применение
где
rsync-from-directory
это локальный каталог иrsync-to-directory
любой локальный или удаленный каталог. Параметры по умолчанию жестко заданы как,-avz
а пороговое значение по умолчанию жестко задано как10GiB
.Сценарий
источник
if (( "$size" > "$THRESHOLD" ))
условного выражения добавьте проверку (передbreak
) дляi==0
и, если это такecho $f >> /tmp/rsyncfilelist
,.Я бы использовал rsync «--dry-run» (или «-n»), чтобы получить список более новых файлов. Тогда я бы использовал другой rsync с опцией "--files-from = -" для отправки файлов. Между ними есть "ужасный" perl .
Что-то вроде этого :
Обратите внимание, что я не тестировал с более чем 10 ГБ, возможно, Perl переполнится при некотором ограничении; чтобы решить это, вместо подсчета байтов используйте Кбайт:
РЕДАКТИРОВАТЬ: я отметил, что это первое решение не будет сортировать файл по mtime , вот более полное решение (похоже на сценарий bash, который был опубликован другим человеком).
источник
Вы можете проанализировать отсортированный вывод
du
. Предполагая, что утилиты GNU:POSIXly, при условии, что ни одно имя файла не содержит символа новой строки:
Обратите внимание, что
du
проходит подкаталоги. Чтобы избежать этого, скажите, сdu
какими файлами вы хотите работать. В целом, вы можете использоватьfind
для фильтрации файлов.источник
rsync
вместоcp
.