#linux #bash
#linux #bash
Вопрос:
Я использовал fdupes
для поиска дубликатов файлов в моей файловой системе, однако я часто ловлю себя на желании либо найти дубликаты определенного файла, либо найти дубликаты файлов в определенном каталоге.
Чтобы уточнить, если я вызываю
fdupes dir1 dir2
Результатом будут все дубликаты файлов, найденные в собранном наборе файлов в dir1
и dir2
. Однако мне бы очень хотелось иметь возможность делать что-то вроде
fdupes-alternative file dir
чтобы найти дубликаты file
в dir
, не беспокоясь о дубликатах файлов в dir
. Или даже возможность чего-то вроде
fdupes-alternative dir1 dir2
и проверить, dir1
дублируются ли какие-либо файлы в dir2
, опять же, игнорируя дубликаты, если они либо все в dir1
, либо dir2
.
Существуют ли какие-либо инструменты, которые делают подобные вещи, или какой-либо простой способ сделать что-то подобное?
Комментарии:
1. Ваш вопрос настолько краток, что его буквально можно воспринимать по-разному. Например, считаете ли вы ссылки дубликатами? Или просто файлы с одинаковыми хэшами? В случае жестких ссылок, если вы хотите удалить одну из них (очевидное последующее действие), что бы вы предприняли?
2. Вопросы, в которых нас просят порекомендовать или найти книгу, инструмент , библиотеку программного обеспечения, учебное пособие или другой сторонний ресурс, не относятся к теме Stack Overflow […].
Ответ №1:
Вы можете фильтровать группы по интересующему контенту.
Предполагая fdupes
формат вывода строки на файл плюс пустую строку для разделения групп, если вас интересует файл, отфильтруйте группы, которые содержат имя файла в виде строки. Например, с помощью awk:
fdupes file dir |
awk -v F=file '
BEGIN { FS="n"; RS="nn" }
{
for (i=NF; i; i--)
if ($i==F) {
printf("%s%s", x ?RS:"", $0)
break
}
}
'
Если вас интересует каталог, отфильтруйте группы, содержащие строки, начинающиеся с этого каталога. Например, снова с помощью ‘awk’:
fdupes dir1 dir2 |
awk -v D=dir1/ '
BEGIN { FS="n"; RS="nn" }
{
for (i=NF; i; i--)
if (index($i,D)==1) {
printf("%s%s, x ?RS:"", $0
break
}
}