«Mv file» и теперь его нет

32

В окне терминала я набрал:

mv filename ..\..      [Note the wrong slash.]

Теперь я не могу его найти. Ушел. Я провел несколько поисков и просмотрел восстанавливаемые удаленные файлы. Ничего такого. Пуф. Служит мне прямо для использования машины с Windows прямо перед.

Кто-нибудь знает, где это могло бы быть?

Джон
источник
find / -iname thefilename -print может быть ?
Сергей Колодяжный
@Serg Если thefilenameв качестве исходного имени файла эта findкоманда не найдет его под новым именем.
Элия ​​Каган,
Я понял это сразу после публикации комментария. Мой первоначальный ответ, если файл отсутствует, - использовать find, но я не понял, что op переименовал файл, а не переместил его
Сергей Колодяжный,

Ответы:

70

Это никуда не ушло, его в текущем каталоге. Он был переименован в ....(четыре точки).

Как и любое имя файла, имеющее .перед, рассматривается как скрытый файл, поэтому он стал скрытым. Так что, если вы это сделаете ls, вы не найдете его. Как всегда, вам нужна опция -a(или -A), lsчтобы просмотреть скрытые файлы, т.е. ls -a(или ls -A), чтобы увидеть ее.

Позвольте мне разбить его, вы пробежали mv filename ..\.., первые две точки означали бы родительский каталог, если бы он был ../, но вы использовали обратную косую черту, ..\которая указывает на оболочку для перехода от следующего символа, но точка .не имеет специального значения для оболочки. Таким образом, он будет обрабатывать его как литерал, .а последний .также будет добавлен, так что вы получите четыре точки ....в качестве имени файла.

Чтобы вернуться к предыдущему (оригинальному) имени, запустите mv .... filename.

heemayl
источник
2
Хахаха ... мне никогда не приходило в голову. Вот оно: «....». Благодарность! Я думаю, это интерпретировало первую точку как точку .hideme.
Джон
2
Могу ли я предложить la -A(с большой буквы). Это так же, как, ls -aно исключает .и ...
Пэдди Ландау
13

Беги, mv .... filenameчтобы переименовать его обратно. ( mv ..\.. filenameтоже будет работать, но \это лишнее - как это было в вашей первоначальной команде.)

  • Файл не был удален, поэтому поиск восстанавливаемых удаленных файлов не нашел его.
  • Как и в Windows, .и ..записи присутствуют в каждом каталоге и ссылаются на «текущий» и «родительский» каталоги соответственно. Но в отличие от Windows, последовательности из более чем двух точек не имеют никакого особого значения. Хотя это необычно, вы можете свободно называть обычный файл с именем, состоящим полностью из точек, при условии, что он имеет длину не менее трех точек.
  • В отличие от Windows, в Ubuntu оболочка использует \escape-символ, гарантируя, что оболочка обрабатывает следующий символ буквально, а не придает ему особое значение. Символ .не имеет особого значения в оболочке (в частности, оболочка не отвечает за работу .и ..записей). Поэтому в вашей команде \.было эквивалентно ..
  • Как говорит heemayl , по умолчанию большинство утилит не показывают файлы и каталоги, имена которых начинаются с a .. Так как ....начинается с ., запуск lsбез флага -Aили -aне показал его.
Элия ​​Каган
источник
1
Именно так я и нашел. Мне было интересно, почему мои "\" не стали побегом, но, к сожалению, ничто так не спасалось, как обычно. Имеет смысл.
Джон
5

он все еще находится в том же каталоге, просто «скрытый» файл. Вы можете восстановить его "mv .... filename".

Брюс
источник