Команда hardlink позволяет задействовать одноименную утилиту, предназначенную для замены дубликатов файлов на жесткие ссылки. Данная утилита способна обходить одну или несколько заданных пользователем директорий в поисках дубликатов файлов. При обнаружении серии дубликатов файла она будет оставлять в наличии лишь одну его мастер-копию. Все остальные копии файла будут удаляться и заменяться на жесткие ссылки, указывающие на мастер-копию. Это позволит сократить использование дискового пространства. Единственное ограничение данного подхода заключается в том, что жесткие ссылки могут работать лишь в пределах отдельных файловых систем.
Базовый синтаксис команды выглядит следующим образом:
$ hardlink [параметры] директория1 [директория2 ...]
Команда может принимать имя или путь к одной или нескольким директориям, а также ряд параметров. Наиболее востребованными параметрами являются параметр -c, позволяющий исследовать лишь содержимое файлов, параметр -f, требующий совпадения не только содержимого, но и имен файлов, параметр -p, позволяющий игнорировать права доступа к файлам, параметр -o, позволяющий игнорировать имена владельцев файлов, параметр -t, позволяющий игнорировать метки времени файлов, а также параметры -x и -i, позволяющие исключить из рассмотрения и включить в рассмотрение файлы с помощью регулярных выражений. Также воизбежание недоразумений следует использовать параметр -n для исследования директорий без выполнения каких-либо действий.
Для начала подготовим директорию с файлами, создав копии одного mp3 и одного rtf-файла:
$ ls -ali
итого 66796
201411657 drwxrwxr-x 2 alex alex 240 сен 14 16:14 .
131 drwx--x--x 44 alex alex 4096 сен 14 14:54 ..
201346019 -rw-rw-r-- 1 alex alex 12326324 авг 20 2012 '01 #endless summer-copy.mp3'
201644099 -rw-rw-r-- 2 alex alex 12326324 авг 20 2012 '01 #endless summer.mp3'
202309549 -rw-rw-r-- 1 alex alex 9637802 авг 20 2012 '02 #mind.mp3'
202310121 -rw-rw-r-- 1 alex alex 18726324 авг 20 2012 '03 #sidewalk.mp3'
202328260 -rw-rw-r-- 1 alex alex 12632074 авг 18 2012 '04 #winter seed.mp3'
202417733 -rw-rw-r-- 1 alex alex 2483 окт 7 2013 AlbumArtSmall.jpg
202417734 -rw-rw-r-- 1 alex alex 10545 окт 7 2013 Folder.jpg
201640988 -rw-rw-r-- 1 alex alex 2340 авг 5 2014 info-copy.rtf
201346020 -rw-rw-r-- 2 alex alex 2340 авг 5 2014 info.rtf
202417738 -rw-rw-r-- 1 alex alex 2708915 авг 18 2012 jacket.png
Очевидно, что копии файлов идентичны в плане атрибутов и размера, но имеют в именах суффиксы -copy. Обратите внимание и на то, что номера структур inode всех файлов директории отличны.
Для замены дубликатов файлов на жесткие ссылки достаточно использовать утилиту без каких-либо параметров, либо с параметром -c. Но для начала все же попробуем использовать утилиту с параметром -n для вывода информации без удаления файлов.
$ hardlink -nc .
Mode: dry-run
Files: 10
Linked: 2 files
Compared: 0 xattrs
Compared: 2 files
Saved: 11,76 MiB
Duration: 0.175730 seconds
Символ точки обозначает текущую директорию. Что же можно узнать из вывода: утилита запущена в безопасном режиме и не удаляла файлов (Mode: dry-run), всего было обработано 10 файлов (Files: 10), возможно создать жесткие ссылки на 2 файла (Linked: 2 files), совпали расширенные атрибуты 0 файлов (Compared: 0 xattrs) и содержимое двух файлов (Compared: 2 files), может быть сохранено 11,76 МиБ дискового пространства, а вся проверка заняла 0.175730 секунд (Duration: 0.175730 seconds).
Теперь запустим утилиту в обычном режиме:
$ hardlink -c .
Mode: real
Files: 10
Linked: 2 files
Compared: 0 xattrs
Compared: 2 files
Saved: 11,76 MiB
Duration: 0.017311 seconds
Обычный режим обозначен в первой строке вывода (Mode: real), затраченное на работу утилиты время сократилось за счет кэширования элементов ФС.
Исследуем содержимое директории:
$ ls -ali
итого 66796
201411657 drwxrwxr-x 2 alex alex 240 сен 14 16:15 .
131 drwx--x--x 44 alex alex 4096 сен 14 14:54 ..
201346019 -rw-rw-r-- 2 alex alex 12326324 авг 20 2012 '01 #endless summer-copy.mp3'
201346019 -rw-rw-r-- 2 alex alex 12326324 авг 20 2012 '01 #endless summer.mp3'
202309549 -rw-rw-r-- 1 alex alex 9637802 авг 20 2012 '02 #mind.mp3'
202310121 -rw-rw-r-- 1 alex alex 18726324 авг 20 2012 '03 #sidewalk.mp3'
202328260 -rw-rw-r-- 1 alex alex 12632074 авг 18 2012 '04 #winter seed.mp3'
202417733 -rw-rw-r-- 1 alex alex 2483 окт 7 2013 AlbumArtSmall.jpg
202417734 -rw-rw-r-- 1 alex alex 10545 окт 7 2013 Folder.jpg
201346020 -rw-rw-r-- 3 alex alex 2340 авг 5 2014 info-copy.rtf
201346020 -rw-rw-r-- 3 alex alex 2340 авг 5 2014 info.rtf
202417738 -rw-rw-r-- 1 alex alex 2708915 авг 18 2012 jacket.png
Номера структур inode копий файлов теперь совпадают с оригиналами. Это обозначает, что избыточное копирование файлов устранено.