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

7

В ОС Windows при копировании файла в каталог, у которого уже есть файл с этим именем, он спрашивает, хотите ли вы:

  1. скопируйте файл и замените / перезапишите существующий
  2. отменить копирование нового файла в каталог
  3. скопируйте файл, но переименуйте его (как-то вроде «filename - copy (1)»)

Когда я делаю это в Ubuntu, у меня нет этого третьего варианта (который много раз очень полезный вариант). Есть ли способ сделать это в Ubuntu?

    
задан heisenbergman 19.10.2014 в 10:30
источник

2 ответа

8

К сожалению, у Nautilus такой опции нет. Вы можете попробовать другой файловый менеджер, например Dolphin или вы можете использовать программу командной строки cp(1) с опцией резервного копирования:

cp --backup SOURCE [SOURCE...] [DESTINATION]

Это имеет следующие эффекты, которые можно контролировать с помощью других параметров, как описано на странице руководства cp(1) :

--backup[=CONTROL]
          make a backup of each existing destination file

-b     like --backup but does not accept an argument

-S, --suffix=SUFFIX
          override the usual backup suffix
     

Суффикс резервного копирования - ~ , если не установлен с --suffix или   %код%. Можно выбрать способ управления версиями   через опцию SIMPLE_BACKUP_SUFFIX или через среду --backup   переменная. Вот значения:

     
  • VERSION_CONTROL , none : никогда не создавать резервные копии (даже если указано off )
  •   
  • --backup , numbered : сделать резервные копии с номерами
  •   
  • t , existing : пронумеровано, если существуют пронумерованные резервные копии, просто в противном случае
  •   
  • nil , simple :   всегда делать простые резервные копии
  •   

Пример

cp --backup=existing --suffix=.orig ~/Music/* ~/Videos

Это скопирует все файлы в never в ~/Music . Если файл с тем же именем существует в месте назначения, он переименовывается путем добавления ~/Videos к его имени в качестве резервной копии. Если файл с тем же именем, что и резервная копия, резервная копия вместо этого переименовывается путем добавления .orig , и если она существует также .1 и т. Д. Только тогда исходный файл скопирован в пункт назначения.

Если вы хотите скопировать файлы в подкаталоги, рекурсивно используйте:

cp -R --backup=existing --suffix=.orig ~/Music ~/Videos
    
ответ дан David Foerster 19.10.2014 в 10:51
источник
1

Обнаружено это на суперпользователе :

#!/bin/bash
cp -vn "" ""/ || cp -vn "" ""/"${1##*/}"~"$(md5sum "" | cut -f1 -d' ')"

Файл с таким же именем переименовывается в файл с добавлением md5sum к имени. Если вы сохраните его в имени файла, например "saveCopy", вы можете использовать find , чтобы выполнить его:

find . -name 'z*.jpg' -exec ./saveCopy {} /tmp/Extracted/ \;

Подробнее об этом см. ссылку.

    
ответ дан Rinzwind 19.10.2014 в 10:52