Более быстрый способ переименовать повторяющиеся файлы (идентифицированные fdupes) в другом каталоге?

У меня есть каталог, полный pdf-файлов журнальных статей, большинство из которых названы их ключом bibtex. Некоторое время назад я сделал резервную копию на внешнем жестком диске, но я не обновлял его, и есть много дубликатов с разными именами. Я хочу вернуть два каталога в синхронизацию и удалить дополнительные файлы.

Используя fdupes, я идентифицировал их, и теперь у меня есть хороший парный список из них. Однако большинство дубликатов на внешнем диске имеют бессмысленные имена. Я бы хотел переименовать их так же, как дубликат в первом каталоге, вместо того, чтобы удалять их и копировать их снова, потому что их так много. Поэтому я не хочу просто использовать rsync.

Например, если вывод fdupes:

/home/articles/bibtex.pdf /external/articles/morearticles44.pdf 

Есть ли более быстрый способ, чем писать

 mv /external/articles/morearticles44.pdf /external/articles/bibtex.pdf 

для каждой пары дубликатов?

2 Solutions collect form web for “Более быстрый способ переименовать повторяющиеся файлы (идентифицированные fdupes) в другом каталоге?”

По моему опыту, fdupes может быть непоследовательным в том порядке, в котором он выводит файлы (у меня были свои проблемы с --delete опции --delete ). Это должно быть достаточно надежным, так как оно не требует, чтобы файлы находились в определенном порядке (поскольку до тех пор, пока в разных папках всегда есть два обмана):

 # note no trailing slash source_dir=/home/articles target_dir=/external/articles fdupes "$target_dir" "$source_dir" | while IFS= read file; do case "$file" in "$source_dir/"*) source=${file##*/} ;; "$target_dir/"*) target=$file ;; '') if [ "$source" ] && [ "$target" ]; then echo mv -i "$target" "$target_dir/$source" fi unset source target ;; esac done 

Это просто распечатает команды mv , удалит echo когда вы уверены, что у вас есть то, что вы хотите. Также опция -i для mv подскажет вам, будет ли она что-либо перезаписывать.

Я предлагаю другой рабочий процесс ( предложенный hasenj ): вместо использования fdupes для идентификации повторяющихся файлов и выполнения некоторой fdupes обработки, чтобы удалить их, вы можете использовать Unison для идентификации и обработки дубликатов.

Вам нужно запустить Unison с одним из корней удаленных, иначе он не обнаружит идентичные файлы. Итак, бегите

 unison /home/articles/bibtex.pdf ssh://localhost/external/articles 

Unison отбросит некоторое время и предложит синхронизировать два дерева. Выберите синхронизацию в направлении > для перемещения /external/articles/morearticles44.pdf в /external/articles/bibtex.pdf .

  • Добавление огромных файлов друг к другу без их копирования
  • назначение привилегий чтения / записи для папки пользователю в CentOS 7
  • Как удалить файлы с помощью ~?
  • Удалить каталоги Linux, содержащие ТОЛЬКО старые файлы
  • Как снова сделать взломанные файлы в репозитории Subversion?
  • Как создать файлы с именем «a to z» - любой трюк?
  • Как реализовать горизонтальный кот?
  • Как получить счет всех расширений файлов на жестком диске с помощью терминала gnu + linux?
  • updatedb для начинающих
  • Почему find -exec du суммируется по-разному?
  • Как найти исполняемые файлы в каталоге
  • Interesting Posts

    Как я могу создавать новые всплывающие окна для отображения на одном рабочем столе своего приложения?

    что является лучшим каталогом для хранения загруженных файлов / изображений с моего сайта

    Я случайно вышел из vim с: x! ~, И теперь моя ~ появляется по другому пути

    Помогите мне, пожалуйста, найти мое недоразумение об этом маленьком фрагменте скрипта

    find script должен удалять пустой рекурсивно после удаления файлов в нем

    Открытие файлов размером больше, чем ОЗУ, без замены.

    Возобновление во время спящего режима после восстановления изображения

    Не настроены ли зоны по умолчанию после предварительной установки в firewalld?

    Компилятор не может найти заголовочный файл, добавить ли каталог в PATH?

    Raspberry pi беспроводная точка доступа TOR. Открытый VPN не подключается. Проблема с DNS

    Изменение размера окна Xterm убивает Django

    Как запустить vncserver как пользователь (а не root)?

    Получение срока действия пароля

    Почему существует * Когда упоминается Unix по всему Интернету?

    Есть ли недостаток при использовании chroot в высокопроизводительных вычислениях?

    Linux и Unix - лучшая ОС в мире.