ТЛ;Д-Р: Бежать ls -1b
, найдите имя файла, скопируйте строку, в которой оно появляется, и передайте его rm
.
Как предполагали другие, скорее всего, это связано с ограничениями в способе ls
-- и некоторые другие программы, включая клиентское и серверное программное обеспечение, по умолчанию обрабатывают странные имена файлов, например, содержащие управляющие символы. Ваш успех с Ответ JdeBP убедительно свидетельствует о том, что так оно и было, хотя это было бы хорошей ставкой даже до этого.
-
Для ls
, когда стандартный выходной сигнал является терминалом, ?
символы печатаются на своих местах. Так что, если ты не собираешься ls
выводится в любую другую команду (или перенаправляет ее в журнал для просмотра), возможно, ваше имя файла не содержит управляющих символов. Но есть и другие проблемные символы - например, возможно, имя файла содержит завершающие пробелы.
Такое поведение ls
может сбивать с толку, но не является ошибкой, может быть явно переопределен пользователем (см. Ниже).
-
При попытке удаленного доступа или удаления файла ошибки в клиенте или серверное программное обеспечение может создавать такие проблемы.
Я сталкивался с подобными вещами через ftp
сам несколько раз, в том числе для файлов, имена которых содержат конечные пробелы. (То, что это не сработало, было связано с ошибкой в моем ftp-клиенте.) Даже когда вы сами создаете файл вручную, в зависимости от того, как вы его создаете, иногда довольно легко случайно вставить завершающий пробел или другие пробелы, которые могут выглядеть как пробелы, даже если это не так.
Это ситуация, когда ls -1b
(или dir -1
) пригодится:
-
-1
говорит ls
чтобы показать одну запись в строке. Таким образом, не возникает путаницы в том, где заканчивается одно имя файла и начинается другое. Это удобно для файлов со странными именами.
-
-b
говорит ls
для печати escape-последовательностей для любых специальных символов. Выход из ls -b
может быть скопирован и вставлен буквально в команду, без дополнительных цитат: все проблемные символы уже заключены в кавычки таким образом, чтобы оболочка распознала их такими, какие они есть.
Есть только одно предостережение: если последний символ в строке выглядит как \
, скопируйте один символ после этого, так как это означает \
это цитирование пробела.
Ты можешь бежать ls -1b
просто так, или вы можете передать ему шаблон shell glob (например, ls -1b qyx*
). Глобулирование может найти или не найти файл, в зависимости от того, присутствуют ли управляющие символы (или другие странные символы) в части имени, отображаемой в шаблоне глобулирования.
Скопировав \
-цитируемая версия имени файла, предоставленная вам ls
, вы можете вставить это в команду. Вам не нужно каким-либо образом изменять его вручную. В вашем случае, если вы хотите удалить файл, введите rm
, введите пробел, вставьте строку и нажмите Enter.
Дальнейшее чтение: