Случайно перемещенная домашняя папка?

Я не совсем уверен, что просто произошло, все, что я сделал работал:

~/Desktop$ mv sublime.desktop \~/.local/share/applications/

\ знак прежде ~/.local подошел как автоматическое заполнение, таким образом, я думал, что оно должно было хорошо выполнить его.

Но вместо того, чтобы переместить файл на рабочем столе в /.local/share/applications/ (который был моим намерением), команда создала новую папку на Рабочем столе. ( ~ была папка),

Liso@thinkpad:~/Desktop$ ls
~  backup.sql  Apps

Когда я пытался удалить ~:

~/Desktop$ rmdir ~
rmdir: failed to remove ‘/home/liso’: Permission denied

Таким образом, что я пропускаю на самом деле?

Править

@Ravexina спрашивают меня к, работал test команда, чтобы подтвердить, было ли это каталогом или файлом.

Liso@thinkpad:~/Desktop$ test -d \~ && echo "it's a dir"
it's a dir`
6
задан 15 August 2017 в 13:46

3 ответа

Вы не перемещали свой корневой каталог...

  • Мы обращаемся к ~ как расширение тильды, большинство времен это будет заменено значением $HOME окружите переменную, прежде чем команда будет выполнена.

  • \ самый сильный тип заключения в кавычки в оболочке.

Так использование \~ Вы пропускаете расширение тильды путем заключения в кавычки его. Средства, которые Вы на самом деле говорите: переместите "sublime.desktop" в новый файл, названный точно "~...".

Я не могу воспроизвести результат Вашей команды, но так или иначе Вы закончили с файлом/каталогом, точно названным ~.

Проверьте, чтобы видеть, является ли это файл или каталог, и получите список его содержания:

test -d ~/Desktop/~ && ls -l ~/Desktop/~ || echo 'it is a file'

Затем переместите их в корректный путь, если бы это был файл для перемещения его назад, то необходимо выйти из его имени снова, иначе это будет расширено до /home/liso:

mv \~ new-name
mv "~" new-name # works
mv '~' new-name # also works
mv ~/Desktop/~  new-name # works fine too

И помните rmdir ~ Вы пытаетесь удалить фактический корневой каталог: /home/liso не ~.

10
ответ дан 23 November 2019 в 07:17

Символ тильды только расширен до Вашего корневого каталога (среди других возможностей), когда он не заключается в кавычки. При помещении \ символ перед ним предотвращает расширение тильды. Когда в сомнении, используйте $HOME вместо этого, поскольку это - регулярная переменная оболочки с предсказуемым синтаксисом и поведением.

Для удаления каталога, названного ~ (удостоверяются, нет ничего важного в нем сначала), необходимо использовать тот же прием как прежде: выйдите из тильды, таким образом, она интерпретируется буквально. О, и необходимо будет также работать rm рекурсивно для удаления непустого каталога:

rm -r "~"
2
ответ дан 23 November 2019 в 07:17

Тильда расширена оболочкой до $HOME пользователя в Вашем случае /home/liso. В первой команде Вы вышли ~ таким образом, это не было расширено до местоположения, которое Вы хотели, вместо этого это было передано буквально mv как символ ~.

Я думаю, что Вы хотели работать

mv sublime.desktop ~/.local/share/applications

(с дополнительным запаздыванием /)

Я ожидал бы команду, Вы говорите, что работали для сбоя как это

mv: cannot move 'sublime.desktop' to '~/.local/share/applications/': No such file or directory

потому что mv не создает целевые каталоги как этот. Если Вы действительно выполняли ту команду, я думаю, что Вам, должно быть, уже назвали каталог на самом деле ~ в Вашем Desktop с тем путем, т.е.

/home/liso/Desktop/\~/.local/share/applications

и раз так Вы теперь найдете файл там:

~/Desktop/\~/.local/share/applications/sublime.desktop

И необходимо работать

mv ~/Desktop/\~/.local/share/applications/sublime.desktop ~/.local/share/sublime.desktop

Но если Вы работали

mv sublime.desktop \~

это создало бы файл ~ потому что sublime.desktop был бы переименован ~. Попытайтесь читать файл

less ~Desktop/\~

Если это содержит содержание Вашего sublime.desktop файл, затем выполненный

mv \~ ~/.local/share/applications/sublime.desktop
6
ответ дан 23 November 2019 в 07:17

Другие вопросы по тегам:

Похожие вопросы: