Как получить / удалить папку, случайно названную с экранированными символами? [Дубликат]

Этот вопрос уже имеет ответ здесь: Доступ к папке, которую я не могу “ name ” в оболочке 3 ответа

Я настраивал облачный сервер и видел, что я случайно добавил папку с именем ^[[4~ (с escape-кодом). Я хочу посмотреть, что внутри, и если это была просто ошибка, тогда удалите этот каталог. Однако я не могу cd и ls содержимое. Я попытался выяснить код выхода, чтобы я мог ввести команду, подобную cd \x1b[30m;, и надеюсь, что она доставит меня в каталог.

Что делать, если я должен был cd или удалить, выполнив поиск первый каталог, указанный в ls. Это возможно? Потому что, когда я делаю ls |grep 4, появляются два результата, и один из них - тот, к которому я пытаюсь получить доступ.

Либо узнайте имя папки в escape-строке, либо измените каталог на первый каталог ls найти может быть решением здесь. Как я могу подойти к этой проблеме?

1
задан 6 October 2013 в 23:31

3 ответа

Узнайте, как назван каталог как экранированный:
$ ls -b
# \033[4~
Удалить по:
rmdir -v `echo -e "\033[4~"`
1
ответ дан 24 May 2018 в 17:12
  • 1
    Это неудобно и не работает (опция -e для rmdir недействительна - и в любом случае вы не хотите удалять каталог с именем echo, если такая директория существует!). Возможно, вы имеете в виду rmdir -v $'\033[4~'. Но OP хотел бы проверить, можно ли удалить каталог (например, cd там и перечислить его файлы ...). – gniourf_gniourf 7 October 2013 в 01:40
  • 2
    о, извините, на самом деле есть «вокруг эха» (уценка отформатирована, исправлена ​​...) – Logan 7 October 2013 в 03:43

Я не знаю, работает ли это для специальных символов, но стоит попробовать. Попробуйте запустить

ls -d */ | grep -n "" | more

в родительской папке; это печатает все его каталоги, которым предшествует число и двоеточие : (что-то вроде 1:folder1 2:folder2 ...). Найдите номер, соответствующий вашей папке, а затем запустите следующую строку (замените ${num} на номер)

cd $(ls -d */ | grep -n "" | grep "^${num}:" | cut -d: -f2)

или, возможно, с кавычками:

cd "$(ls -d */ | grep -n '' | grep ^${num}: | cut -d: -f2)"
ls -d */ перечисляет все каталоги grep -n "", соответствующие всем строкам, содержащим "", т.е. каждый, а опция -n перечисляет каждый из них grep "^${num}:" печатает только ${num} -я строка, поскольку строка похожа на LineNumber:FolderName, cut -d: -f2 выбирает только FolderName ls $( ..command.. ) использует вывод ..command.. в качестве аргумента ls
0
ответ дан 24 May 2018 в 17:12

Попробуйте использовать кавычки.

cd "\x1b[30m;"

-1
ответ дан 24 May 2018 в 17:12
  • 1
    Проблема в том, что я не знаю, как выглядит код escape. Как я могу узнать, какой код ESC будет для этой папки? – Logan 6 October 2013 в 23:42
  • 2
    Я действительно нашел его, введя команду ls -b. Теперь имя папки выглядит как \033[4~. – Logan 6 October 2013 в 23:45

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

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