Я использую rsnapshot для резервного копирования, которая генерирует серию папок, содержащих файлы с тем же именем. Некоторые файлы жестко связаны, а другие - отдельные. Например, hourly.1/file1
и hourly.2/file1
могут быть жестко связаны с тем же файлом, в то время как hourly.1/file2
и hourly.2/file2
являются совершенно отдельными файлами.
Я хочу найти объем пространства, используемого папкой, hourly.2
игнорируя любые файлы, в которых есть жесткие ссылки на файлы hourly.1
. Поэтому в приведенном выше примере я хотел бы получить размер file2, но игнорировать file1.
Я использую bash для Linux, и я хочу сделать это из командной строки настолько просто, насколько это возможно, поэтому, пожалуйста, никаких больших графических или других ОС-решений.
источник
hourly2
, ваша команда изменит неправильный ответ.hourly.2
. Если они скопированы туда, у них не будет лишних ссылок, и моя команда будет работать. Если они жестко связаны, очевидно, что это не удастся. Я предполагаю, что новые резервные копии копируются.Если вам конкретно нужен размер файлов, которые присутствуют в папке,
hourly.2
но не в нейhourly.1
, вы можете получить ее косвенноdu
. Если один иdu
тот же файл обрабатывается более одного раза (даже под разными именами, то есть с жесткими ссылками), он считает файл только в первый раз. Итак, чтоdu hourly.1 hourly.2
сообщает,hourly.2
это размер, который вы ищете. Таким образом:(Работает в любой системе POSIX и большинстве других вариантов Unix. Предполагается, что имя каталога
hourly.1
не содержит новой строки.)источник
Как говорит @Gilles, поскольку
du
подсчитывает только первые из всех жестких ссылок, указывающих на тот же инод, с которым он сталкивается, вы можете дать ему каталоги подряд:Т.е. любой файл в 'hourly.2', ссылающийся на inode (он же "настоящий" файл), уже упомянутый в 'hourly.1', подсчитываться не будет.
источник
$ du -hcs dirA dirB
Более простой
пример
источник
Внушительные сборки BusyBox
find
поставляются без-printf
поддержки. Вот модификация ответа @ grebneke :источник