rsync -avh --progress file1 file2
# копіювання з видаленням файлів/каталогів в destination, яких вже немає у source
# ключ -P є еквівалент --partial --progress
rsync -avPh --delete /source/ /destination
# не виконувати копіювання, якщо в destination файл новіший ніж в source
# ключ -u або --update
rsync -avuPh --delete /source/ /destination
# копіювання файлів по SSH (по "нестандартному" порту) з дозавантаженням
rsync -avP --append --progress -e "ssh -p 11111" /source/ user@server.org:/destination
# попередній перегляд змін (актуально при видаленні)
rsync --dry-run -avPh --delete /source/ /destination
# у впадку помилки "rsync IO error encountered -- skipping file deletion"
# або різного розміру каталогів (та кількості файлів) після синхронизації
rsync -avPh --ignore-errors --delete /source/ /destination
Якщо при копіюванні каталогу вказати замикаючий слеш, то сам каталог не буде створено, а перепишеться лише його вміст:
$ tree /source
source
├── file1
├── file2
└── ...
$ rsync -aP /source/ /destination
$ tree /destination
destination
├── file1
├── file2
└── ...
$ rsync -aP /source /destination
$ tree /destination
destination
└── source
├── file1
├── file2
└── ...
Найбільш часто вживані ключі (повний перелік див. rsync man page):
За для пришвидшення процесу копіювання можна запустити N копій програми:
ls /dir/source | xargs -n1 -P4 -I% rsync -Pa % /destination
xargs читатиме перелік каталогів і запускатиме 4 rsync процесів за раз (символ % замінює вхідний аргумент кожного виклику команди).
Новая версія: rsync
Rclone дозволяє синхронізацію з хмарними сховищами (Microsoft OneDrive, Google Drive та ін.). Конфігурацію з’єднання можна реалізувати як в консолі, так і за допомогою web-інтерфейсу
# interactive configuration
rclone config
# web-based graphical user interface
rclone rcd --rc-web-gui
Приклад синхронізації локальної директорії на OneDrive
# rclone sync
# -P # показати прогрес під час передачі (скорочення від --progress)
# --fast-list # recursive list (uses more memory but fewer transactions)
# --buffer-size=1G # розмір буфера при читанні файлів (для кожного з --transfer)
# --transfers=5 # кількість паралельних передач файлів (за замовчуванням 4)
# --checkers=40 # кількість перевірок, які запускаються паралельно (за замовчуванням 8)
# --tpslimit=10 # кількість HTTP запитів до сервера в сек.
# --onedrive-chunk-size=1G # розмір блоку для завантаження файлів
# --max-backlog=200000 # максимальна кількість синхронізованих об’єктів
# /media/hdd/photo/ # джерело
# "OneDrive":photo # OneDrive - ідентифікатор з'єднання (ця назва створена на етапі конфігурації) : директорія призначення
rclone sync -P --fast-list --buffer-size=1G --transfers=5 --checkers=40 --tpslimit=10 --onedrive-chunk-size=5M --max-backlog=200000 /media/hdd/photo/ "OneDrive":photo
Копіювання файлів:
rclone copy -P --buffer-size=1G --onedrive-chunk-size=2560K /media/file.zip "OneDrive":/
Параметр –onedrive-chunk-size для OneDrive має бути кратним 320 KiB (327 680 bytes). За умовчанням він рівний 10 Mi (10 Mi = 10485760 byte), тобто 10485760/320 = 32768. У випадку низької швидкості передачі даних, можна підібрати з ряду: 5M, 2560K, 1280K, 640K.
sudo apt-get install unison unison-all
sudo apt install unison unison-gtk # GUI
unison directory1/ directory2/
sudo apt-get install fdupes
# запис у файл дублікатів з вказанням розміру (пошук по каталогам рекурсивний: ключ -r)
fdupes -r -S /dir > result.txt
# пошук одночасноу декількох каталогах
fdupes -r /dir1 /dir2 /dir3
# отримання узагальненої інформації про кількість та розмір дублікатів
fdupes -r -m /dir
# видалення дублікатів з запитом до користувача (інтерактивний режим)
fdupes -r -d /dir
# зберігання першого файлу з набору дублікатів при видаленні (решта буде видалено автоматично)
fdupes -r -dN /dir
Приклади використання у комбінації з іншими командами:
# отримати вихідний файл
fdupes -r /dir > output.txt
# сортування рядків файлу
sort output.txt > output_sorted.txt
# видалення пустих рядків з файлу
grep "\S" output.txt > output_sorted.txt
# пошук рядків за шаблонома (містить слово 'photo') та сортування
grep "photo" output.txt | sort > output_sorted.txt
# вставка символу " (лапки) на початку та кінці кожного рядка
# для уникнення впливу пробілів в іменах файлів при подальшому використанні команди rm
sed "s/\(.*\)/\"\1\"/" output.txt > output_sorted.txt
# видалення файлів за списком
cat output.txt | xargs rm -f
# видалення порожніх каталогів (рекурсивно)
find ./dir -type d -empty -delete
# просумувати розмір файлів з сортованого списку (вивід в Мб)
cat ./output.txt | xargs du -b | awk -v sum=0 '{print sum+=$1/(1024*1024)}' | tail -1
Пошук дублікатів та схожих фото:
Автоматичне створення дерева каталогів з датами та копіюванням до них фото:
ls -il
...
012345 -rw-r--r-- .... # потрібний нам файл
...
find . -inum 012345 -exec rm -i {} \;
# рекурсивно замінити в іменах файлів пробіли на знаки підкреслювання
find . -type f | rename -v 's/ /_/g'
# фільтрація по шаблону (записати в file.txt всі імена файлів, що відповідають шаблону)
find . -regex '.*[hH][0-9].*' > file.txt
# рекурсивний пошук та заміна рядка у всіх файлах
find . -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'