Операції з файлами


Синхронізація

rsync (one-way)

rsync -avh --progress file1 file2

# копіювання з видаленням файлів/каталогів в destination, яких вже немає у source
# ключ -P є еквівалент --partial --progress
rsync -avPh --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

unison (two-way)

sudo apt-get install unison unison-all
sudo apt install unison unison-gtk      # GUI

unison directory1/ directory2/

gui-tools (two-way)

Пошук / видалення дублікатів

fdupes

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

gui-tools

Фотоархів / Сортування

Пошук дублікатів та схожих фото:

Автоматичне створення дерева каталогів з датами та копіюванням до них фото:

Видалення файлів з назвами в неправильному кодуванні

ls -il
...
012345 -rw-r--r-- .... # потрібний нам файл
...
find . -inum 012345 -exec rm -i {} \;