Не удается удалить файл с помощью?? в имени файла

Просто используйте «на нем». Этот шаблон (я не знаю, действительно ли это называется) убеждает, что оболочка читает его как строку вместо подстановочного знака. Подобно :

rm '*.txt'
1
задан 15 March 2016 в 04:44

2 ответа

У файла действительно есть ? в имени файла, или это непечатаемый символ, который ls показывает как ??

$ touch $'a\ab' 'a?b'
$ ls
a?b  a?b

В одном файле есть ASCII Символ BELL в имени, а другой имеет простой старый знак вопроса.

Новые версии ls по умолчанию могут показывать специальные символы в более ясной форме:

$ touch $'b\aa'
$ ls
'b'$'\a''a'
[d3 ] ls -q показывает, как устаревшие версии ls отображают непечатаемые символы по умолчанию. Итак, если вы просто выполняете ls в любой текущей версии Ubuntu, вы, вероятно, увидите только вопросительные знаки.

Попробуйте вместо этого один из:

$ ls -b
a?b  a\ab
$ printf "%q\n" *
a\?b
$'a\ab'

Если у результата из любого из них нет вопросительных знаков, то имя файла не имеет вопросительных знаков.

Вы можете использовать вывод printf для удаления:

rm a\?b
rm $'a\ab'

Или полагайтесь на завершение табуляции:

$ rm a<tab>
a?b   a^Gb 

Если он показывает ^G, затем нажмите CtrlV, затем CtrlG, чтобы ввести его. Или скажите bash для циклического завершения вкладок табуляции:

$ bind tab:menu-complete
$ rm a<tab>
$ rm a\?b<tab>
$ rm a^Gb

В любом случае использование rm a?b может работать, но опасно. Он будет соответствовать всем именам файлов, начиная с a, заканчивая на b и имеющим один символ между:

$ touch acb; printf "%q\n" a?b
a\?b
$'a\ab'
acb

Итак, если вы rm a?b (или, что еще хуже, rm a*b), вы можете в конечном итоге удалить файлы, которые вы не намеревались.

3
ответ дан 23 May 2018 в 12:51
  • 1
    Я не пробовал это, потому что я просто хотел, чтобы файл пропал, и другие ответы сработали для меня. Но вы покрыли некоторые вещи, которые я не знал, спасибо большое! – Noki 16 March 2016 в 02:03

rm -f 'path?.mkv' работает для меня. Исправьте меня, если я ошибаюсь, но ' ' отключает функциональность некоторых специальных символов, таких как ?. Извините за плохое форматирование, требуя скорости, чтобы спешить. Надеюсь, это поможет, у меня хороший день =)

2
ответ дан 23 May 2018 в 12:51
  • 1
    Это сработало, после того, как я опубликовал, я нашел другой файл, и это не помогло. Но приятно знать спасибо! – Noki 16 March 2016 в 01:59

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

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