Ваше имя файла содержит тире –
;это не знак дефиса-минуса -
(юникод U + 002D HYPHEN MINUS , также в ASCII ), но U + 2013 EN DASH в Unicode .Возможно, имя вашего файла содержит другие странные символы (тогда вам нужно найти, какие из них).
Попробуйте сначала перечислить этот файл, без globbing , используя ls (1) команда (читайте о path_resolution (7) ...).Также рассмотрите возможность использования strace (1) в этой команде ls
.Попробуйте также echo * | od -cxi
, чтобы понять, что происходит.Это означает, что некоторые ls ./–
(или что-то подобное).Я полагаю, что это работает (возможно, требуется цитирование ).Найдите точно, как заставить ls ./– | od -cxi
работать правильно.Затем используйте ls -l
вместо просто ls
, чтобы быть уверенным (иногда ls
может быть с псевдонимом , поэтому вам нужно отключить это, возможно, набрав /bin/ls
вместо ls
)
Вы можете удалить его, скопировав / вставив это странное имя, или, после соответствующего изменения вашего рабочего каталога с cd
, возможно с
rm ./–
последний символ этой команды ( copy / paste d) - Unicode U + 2013 EN DASH;Как точно ввести этот юникодный символ en-dash - это отдельная история (это может зависеть от среды вашего рабочего стола, вашего эмулятора терминала, вашего оконного менеджера, вашей раскладки клавиатуры, вашей локализации).На десктопах Linux может помочь утилита charmap
GUI (из пакета Debian или Ubuntu gucharmap
).Вы можете выбрать этот символ с помощью мыши (среди тысяч других символов Юникода) и скопировать / вставить его в UTF-8.
Если в вашем каталоге есть несколько записей, вы можете попробовать
rm -rif .
и команда /bin/rm
будет запрашивать у вас каждую запись (или попробуйте просто rm -if *
, если вы не хотите заходить в подкаталоги).
Если непослушный файл является единственным в своем каталоге (исключая, конечно, записи .
и ..
; проверьте с помощью ls -al
), вы можете rm -rf
этот каталог и воссоздать этот каталог с помощьюmkdir
Если ваша оболочка настроена на glob для символов Юникода (не только для байтов или ASCII), вы можете попробовать rm -i ./?
Если ничего не работаетВы даже можете написать небольшую C-программу, вызывающую remove (3) или rename (2) (и проверяющую, что это удалось) на "\342\200\223"
( UTF-8 кодировка en-dash).Если вам нужно программно сканировать ваш странный каталог (чтобы найти точное странное имя), рассмотрите nftw (3) или opendir (3) , цикл включен readdir (3) с stat (2) и т. Д. ... Или код, написанный на языке сценариев, таком как Python.И вы можете использовать некоторый файловый менеджер с графическим интерфейсом, делающий то же самое.
В 2018 году у нас везде есть UTF-8 .Если по ошибке ваш рабочий стол и локализация не используют UTF-8, вам необходимо это исправить.См. locale (7) .
Вы также можете использовать команду printf (1) , чтобы получить этот странный символ (эта printf
команда есть в POSIX).Поэтому команда rm -v $(printf "\342\200\223")
должна работать (в AIX rm
может не соответствовать GNU, поэтому вы не можете использовать rm -v
только rm
)