Детализация подходаuniq
-из комментариев выше:
$ tr ',' '\t' < temp/testfile | uniq -f 1 | tr '\t' ','
1,ed23,jon,doe,director,usa
3,er67,jake,Kogan,director,usa
5,dc10,Charls,Morg,manager,usa
6,kc56,patel,Kumar,associate,india
Использование \t
в качестве разделителя, чтобы не забиваться пробелами в ваших данных.
uniq
сохранит первую из найденных уникальных строк. Если вам абсолютно необходимо сохранить «последние» записи, вам нужно работать с конца до начала вашего файла. Вы можете сделать это, используяtac
:
$ tac temp/testfile|tr ',' '\t' | uniq -f 1 | tr '\t' ','|tac
2,ed23,jon,doe,director,usa
4,er67,jake,Kogan,director,usa
5,dc10,Charls,Morg,manager,usa
6,kc56,patel,Kumar,associate,india
В вашем решении есть две основные проблемы, поэтому создание каждой копии занимает так много времени:
rsync
не может определить и пропустить уже скопированные файлы. Поэтому каждый вызов будет копировать все rsync
считает одной частью локальной файловой системы, в другую. В этом случае вы не получаете добавочные копии, но любое изменение в файле приводит к полному копированию всего этого Исправления
--times
(-t
), либо --archive
(-a
), чтобы захватить большую часть метаданных за одно обращение. Сделайте это, даже если вам придется продолжать использовать NFS ssh
транспорт на сервер NFS(remoteHost
в моем примере)--compress
(-z
)Пример
rsync -az /archive/images/ remoteHost:/mnt/backup/archive/images
Я обычно включаю--partial --progress --verbose
(-Pv
)и при работе в интерактивном режиме
При первом запуске этой измененной команды в вашей ситуации вы обнаружите, что ее выполнение по-прежнему занимает много времени. Это связано с тем, что rsync
не имеет быстрого способа определить, какие файлы обновлены -, и он делает это со временем и размером файлов -, поэтому он должен сравнивать каждую пару файлов (источник и место назначения ), чтобы обнаружить только метаданные разные. После этого rsync
будет рассматривать файл для копирования только в том случае, если его размер или время отличаются, поэтому неизмененные файлы будут пропущены.