Переместить файл и переименовать его, если папка назначения также содержит файл с тем же именем

#linux #bash #shell

#linux #bash #оболочка

Вопрос:

Извините за мой плохой английский. Я хочу переместить файл с рабочего стола в пункт назначения ввода пользователя. Если в пункте назначения также есть файл с тем же именем, как я могу попросить пользователя переименовать файл, чтобы он мог иметь их оба в папке назначения? У меня есть это прямо сейчас:

 #!bin/bash
echo "path"
read path
echo "Do you want to move code files somewhere else?"
read -t 5 y
if [[ $y = 'yes' ]] ; then
echo "Tell me where:"
read mydest
find $path -type f ( -name "*.c" -or -name "*.cxx" -or -name "*.cpp" -or -name "*.cc" ) );do
mv ???
fi 
  

Комментарии:

1. GNU coreutils man mv : —backup[=CONTROL] создайте резервную копию каждого существующего файла назначения

2. @JamesBrown : я думаю --backup , здесь не поможет. Операционная система хочет в интерактивном режиме запросить у пользователя новое имя файла, если файл уже существует.

3. @katoutou : Разделите вашу проблему на две части: сначала напишите небольшой скрипт, который просто перемещает один файл, запрашивая у пользователя новое имя, если назначение уже существует. Как только это будет сделано, используйте этот скрипт в вашей find команде. Кстати, вы find также попали бы в каталоги с совпадающими именами. Если вы хотите ограничить перемещение только файлами, добавьте -type f предикат.

Ответ №1:

Демонстрация использования mv переключателей и -i (интерактивных) и --backup :

 $ echo foo > foo              # making test files
$ echo bar > bar
$ mv -i --backup foo bar      # mving foo
mv: overwrite 'bar'? y        # -i caused this
$ cat bar                     
foo                           # mv caused this
$ cat bar~                    # --backup caused this
bar