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

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

  1. скопируйте файл и замените/перезапишите существующий
  2. отмена, копирующая новый файл в каталог
  3. скопируйте файл, но переименуйте его (как что-то как "имя файла - копия (1)")

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

11
задан 19 October 2014 в 15:07

4 ответа

К сожалению, Наутилус не имеет той опции.

Опция 1: другой файловый менеджер

Вы могли попробовать другой файловый менеджер как дельфин.

Install Dolphin (требует репозитория Вселенной),

Опция 2: командная строка

Можно также использовать программу командной строки cp(1) с резервной опцией:

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

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

--backup[=CONTROL] ― сделайте резервное копирование каждого существующего целевого файла

-b ― как --backup но не принимает аргумент

-S, --suffix=SUFFIX ― переопределите обычный резервный суффикс

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

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

Пример

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

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

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

cp -R --backup=existing --suffix=.orig -t ~/Videos ~/Music
15
ответ дан 16 November 2019 в 14:55

Найденный этим на суперпользователе :

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

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

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

Для больше на этом см. ссылку.

2
ответ дан 16 November 2019 в 14:55

Было решение (ультракопировальное устройство) к этому вопросу на этом форуме прежде: см. https://ubuntuforums.org/showthread.php? t=2251859 Согласно тому обсуждению, это может eb, интегрированный в Наутилус.

0
ответ дан 16 November 2019 в 14:55

Скопируйте этот скрипт в верхний каталог, сделайте его исполняемым и запустите:

#!/bin/bash

## Get a list of all files
list=$(find . -mindepth 2 -type f -print)
nr=1

## Move all files that are unique
find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
    mv -n $file ./
done
list=$(find . -mindepth 2 -type f -print)

## Checking which files need to be renamed
while [[ $list != '' ]] ; do
   ##Remaming the un-moved files to unique names and move the renamed files
   find . -mindepth 2 -type f -print0 | while IFS= read -r -d '' file; do
       current_file=$(basename $file)
       mv -n $file "./${nr}${current_file}"
   done
   ## Incrementing counter to prefix to file name
   nr=$((nr+1))
   list=$(find . -mindepth 2 -type f -print)
done
0
ответ дан 2 December 2019 в 08:31

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

Похожие вопросы: