Лучший способ найти дубликат определенного файла или определенного набора файлов

Я использую fdupes для поиска дубликатов файлов в своей файловой системе, однако мне часто хочется либо найти дубликаты конкретный файл, либо найти дубликаты файлов в определенном каталоге.

Чтобы уточнить, если я позвоню

fdupes dir1 dir2

Результатом будут все дубликаты файлов, найденные в собранном наборе файлов в dir1 и dir2. Тем не менее, я действительно хотел бы иметь возможность сделать что-то вроде

fdupes-alternative file dir

чтобы найти дубликаты file в dir, не беспокоясь о дублирующихся файлах в dir. Или даже иметь возможность что-то вроде

fdupes-alternative dir1 dir2

и проверить, дублируются ли какие-либо файлы в dir1 в dir2, опять же, игнорируя дубликаты, если они все находятся в dir1 или dir2.

Существуют ли какие-либо инструменты, которые делают такие вещи, или какой-либо простой способ сделать такие вещи?

Ваш вопрос немного краток, и его можно буквально понимать по-разному. Например, вы считаете ссылки дубликатами? Или просто файлы с одинаковыми хэшами? В случае с жесткими ссылками, если вы хотите удалить одну (очевидное последующее действие), что вы предпримете?

sjsam 07.04.2019 20:09
Вопросы, в которых нас просят порекомендовать или найти книгу, инструмент, программную библиотеку, учебное пособие или другой сторонний ресурс, не относятся к теме Stack Overflow [...].
Cyrus 07.04.2019 20:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете фильтровать группы по интересующему вас содержимому.

Предполагая fdupes выходной формат строки на файл плюс пустая строка для разделения групп, если вас интересует файл, отфильтруйте группы, которые содержат имя файла в виде строки. Например с awk:

fdupes file dir |\
awk -v F=file '
    BEGIN { FS = "\n"; RS = "\n\n" }
    {
        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 = "\n\n" }
    {
        for (i=NF; i; i--)
            if (index($i,D)==1) {
                printf("%s%s, x++?RS:"", $0
                break
            }
    }

Другие вопросы по теме