Более быстрый способ переименовать повторяющиеся файлы (идентифицированные 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 .

  • Какая программа использует какой пакет?
  • Переименуйте кучу файлов с определенным шаблоном
  • Есть ли способ точно указать, к каким файлам обращается команда?
  • Есть ли файл для каждого сокета?
  • Как известны типы файлов, если не из суффикса файла?
  • Я хочу, чтобы grep из текстовой строки из многих файлов, как я могу запустить цикл для этого
  • объединение вывода из разных сценариев в разные файлы в цикле
  • Архив Zip с ограниченным количеством файлов
  • Как я могу перечислить имена каталогов, содержащих имена файлов, соответствующие шаблону?
  • Найти изображения с одинаковой временной отметкой exif
  • Сортировка файлов в папки, в зависимости от типа файла
  • Linux и Unix - лучшая ОС в мире.