
Я пытаюсь переименовать несколько сотен файлов на основе другого файла в том же каталоге. Я нашел скрипт и с модификацией у меня есть следующее:
while read file; do echo mv "\"${file%/*}/Trailer.mov\"" "\"${file%.*}-Trailer.mov\""; done < <(find . -type f ! -name "Trailer.mov" -name "*.mkv")
Он выводит команды mv следующим образом:
mv "./dir1/Trailer.mov" "./dir1/filename-Trailer.mov"
Команды mv переименовывают файлы правильно (если они существуют), когда я запускаю их вручную. Когда я запускаю скрипт без echo, он выдает ошибки вроде таких:
mv: cannot stat ‘"./dir1/Trailer.mov"’: No such file or directory
Эта ошибка происходит для каждого элемента независимо от существования файлов. Почему это происходит? Я работаю как root.
решение1
Вам необходимо либо удалить внутренние кавычки, либо использовать eval
.
Проблема в том, что "
теперь символы s считаются частью имени файла, т.е. происходит попытка доступа к неправильному имени файла (которого не существует).