Случайное перемещение файлов и папок в несуществующие места
Вопрос
Я часто выполняю такие команды, как:
mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist
Затем я понимаю, что мои файлы пропали.Я не вижу их даже в папке «$something_that_does_not_exist».Куда пропали мои файлы и папки?Как я могу получить их обратно?
Решение
Чтобы предотвратить эту проблему, у меня есть привычка всегда добавлять / в конец имен каталогов при использовании cp
или mv
:
$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory
Без косой черты в конце, mv
выполняет операцию переименования файла.Вы можете обнаружить, что ваши файлы изменили имя.
Другие советы
Если $something_that_does_not_exist
расширяется до нуля (но я не уверен, что это ваша проблема?), тогда первый mv потерпит неудачу.Вторая команда mv также завершится неудачей, если только "files*"
развернуть ровно до двух файлов или, если последнее имя файла "files*"
расширяется и оказывается каталогом.Затем файлы будут перемещены в этот каталог.
Если команда находится в скрипте и вы хотите, чтобы ваш скрипт прерывался при попытке расширить переменную, а она не установлена, вы можете использовать модификатор вопросительного знака.Пример:
$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$
Итак, если вы используете
mv folder ${something_that_does_not_exist?}
и something_that_does_not_exist
не установлен, последующие команды выполняться не будут.
Вы не сможете вернуть свои файлы, так как оболочка расширит ваши файлы, и я полагаю, что последний файл в списке теперь будет называться $something_that_does_not_exist.
Все остальные файлы в списке будут перезаписаны.Поэтому вы не сможете их вернуть.
РЕДАКТИРОВАТЬ:На моей гладкостенной виртуальной машине (единственный GNU/Linux, который у меня сейчас под рукой!) я получаю следующее:
$ mkdir t1
$ mv t1 t2
$ ls
t2/
$ mv t2 t1
$ cd t1
$ touch f1 f2 f3 f4
$ mv f* ../t2
mv: target `../t2' is not a directory
mv folder $something_that_does_not_exist
Это должна быть ошибка:
$ mkdir folder
$ mv folder
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
mv [-f] [-i] f1 ... fn d1
mv [-f] [-i] d1 d2
Другой случай зависит от того, что files*
соответствует:
mv files* $something_that_does_not_exist
Если окончательное совпадение — это каталог, вы, скорее всего, найдете там свои файлы.В противном случае вы либо переименуете первый файл так же, как второй, либо получите другую ошибку, как указано выше.
1) Вы пытаетесь переместить каталог «папка»:
mv folder abcde
Если «abcde» является существующим каталогом, «папка» будет перемещена в «abcde».Если «abcde» является существующим файлом, команда завершится неудачей.В противном случае он переименует «папку» в «abcde».
2) Вы пытаетесь переместить некоторые файлы:
mv files* abcde
Если «abcde» является существующим каталогом, «файлы*» будут перемещены в «abcde».В противном случае, если есть только один файл, соответствующий «files*», он переименует этот файл в «abcde».В противном случае команда завершится неудачно.