#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