Цифровой садик - приветственная

Цифровой садик - приветственная | Полный список всего, что тут есть | RSS | Подписаться через follow.it

25.02.2025

Fdupes, rdfind и убиение дублей файлов

Создано раньше, тока дошли руки вынуть из латехового.

Проблема поиска одинаковых файлов на диске знакома многим. Одним из очевидных решений является использование консольных программ fdupes и/или rdfind.

Если обшаривать не особенно обширные пространства, можно запустить fdupes с ключиком -d, и на каждую группу файлов она будет спрашивать, какие оставить. Заметим, варианта «удали всё нафиг, и чтоб глаза мои не видели!» не предусмотрено. Один экземпляр останется, придётся удалять ручками. Если пространства обширные и дублей много - разгребание в таком режиме просто неподъёмно.

Можно попросить fdupes сложить все обретённые сведения в файлик, например, fdupes -r ./ > duplicates.txt - прошариваем всё, что в текущем каталоге и подкаталогах. Тогда с этим файликом надо будет как-то разбираться. И опять возникает потрясающая идея удалять всё ручками. Брр!

А ещё, когда разгребаешь от дублей большие объёмы, практически гарантированно возникают пустые папки, папки пустых папок, папки папок пустых папок, и опять же, разгребать всё это безобразие лучше бы не вручную.

Вопросы задали, переходим к ответам.

Ответ номер один - команда, которая может удалять файлы по выданному ей списку. Собирать из xargs и rm, опции по вкусу :)

Смысл xargs тут в том, чтобы передать аргументы команде. Xargs, в отличие от rm и rmdir, соглашается брать инфу и из файла, и из standart input, и умеет собрать команду с этой инфой. И это круто! :)

У меня

xargs --arg-file="2del.txt" --delimiter="\n" -I{} --max-args=1 --interactive --no-run-if-empty --verbose --max-procs=1 rm '{}'

Берём инфу из файла с говорящим названием «удалить», разделитель элементов — новая строка, заменять на элементы из файла будем «{}», удаляем поштучно, спрашиваем разрешения, ничего не делаем с пустой или пробельной строкой, работаем в один процесс.

Это самый осторожный вариант. Реально лучше убрать --interactive, и запускать rm с опцией -f.

cat 2del.txt | grep -v "slovari/stardict/en/" | xargs --delimiter="\n" -I{} --max-args=1 --no-run-if-empty --verbose --max-procs=1 rm '{}'

Примерно то же, но в 2del.txt находится куча имен файлов, из которых (файлов) некоторые (см. что грепаем) удалять не надо. А сортировать вручную - вломмм, и идейно неправильно, ибо пусть работу компа делает комп.

Что приятно - grep без -v будет отдавать дальше то, что совпадает с шаблоном. С -v - то, что не совпадает. Как удобнее в конкретном случае, так и делаем. )

Ответ номер два - команда, которая может находить пустые папки: find где_искать -type d -empty. Если всё можно нафиг, то find где_искать -type d -empty -delete.

Если нет, то выводим результат работы find в файл, и собираем команду, которая может удалять пустые папки точно так же, по списку. Почти аналогично первому, но rmdir.

Подробнее про find.

Как у меня это работает.

rdfind - только собираюсь описать. Её великий плюс - умение ставить хардлинки на идентичные файлы.

^.*/home -> /home - замена, которую делаю в emacs в файле 2del, упомянутом выше, если собираю из results.txt rdfind-а.

А ещё, по слухам, можно поставить FSlint и что-то из этого сделать, тыцкая на кнопочки. На любителя.

Jdupes - вроде бы замена и fdupes, и rdfind.

Ещё одна замена — backdown.


Если у вас есть мысли, комментарии, предложения или отклики по поводу этой страницы или этого цифрового сада в целом, напишите мне сообщение на agnessa@agnessa.pp.ru. Мне ооочень интересно!

Задонатить.


An IndieWeb Webring 🕸💍