mv: невозможно перезаписать каталог с помощью non-directory

можно ли обойти эту проблему?

у меня есть ситуация, когда мне нужно переместить некоторые файлы в 1 каталог ниже.

/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 * ../

2 ответов


вы не можете заставить 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