Ответ 1
Вы не можете заставить mv перезаписать каталог с файлом с тем же именем. Вам нужно будет удалить этот файл, прежде чем использовать команду mv.
Можно ли обойти эту проблему?
У меня есть ситуация, когда мне нужно переместить некоторые файлы в один каталог ниже.
/a/b/c/d/e/f/g
проблема заключается в том, что имя файла внутри каталога g/
совпадает с именем каталога
и я получаю следующую ошибку:
mv: cannot overwrite directory `../297534' with non-directory
Пример: /home/user/data/doc/version/ 3766/297534 - это каталог, внутри которого также есть файл с именем 297534
поэтому мне нужно переместить этот файл внутри /home/user/data/doc/version/ 3766
Команда Это то, что я запускаю: (в цикле for)
cd /home/user/data/doc/version/3766/297534
mv * ../
Вы не можете заставить mv перезаписать каталог с файлом с тем же именем. Вам нужно будет удалить этот файл, прежде чем использовать команду mv.
Добавьте еще один слой в ваш цикл.
Замените mv * ../
на
for f in `ls`; do rm -rf ../$f; mv $f ..; done
Это гарантирует, что любой конфликт будет удален первым, предполагая, что вам не нужен каталог, который вы переписываете.
Обратите внимание, что это взорвется, если у вас есть файл внутри текущего каталога, который соответствует текущему имени каталога. Например, если вы находитесь в /home/user/data/doc/version/3766/297534
, и вы пытаетесь переместить каталог с именем 297534
вверх. Один обходной путь к этому - добавить длинный суффикс к каждому файлу, так что мало шансов на совпадение
for f in `ls`; do mv $f ../${f}_abcdefg; done