Как удалить файл, начинающийся с «>» или других необычных символов [закрыто]

8

Я случайно создал файл с именем

> option[value='2016']

Как я могу удалить это?

My attempts:

$ rm "> option[value='2016']"
rm: cannot remove ‘> option[value='2016']’: No such file or directory
$ rm \> o*
rm: cannot remove ‘>’: No such file or directory
rm: cannot remove ‘o*’: No such file or directory
$ rm `> o*`                                                                               
rm: missing operand
Try 'rm --help' for more information.
$ rm \> option*
rm: cannot remove ‘>’: No such file or directory
rm: cannot remove ‘option*’: No such file or directory
$ rm '\> option*'                                                                         
rm: cannot remove ‘\\> option*’: No such file or directory
$
$ rm "\> option*"                                                                         
rm: cannot remove ‘\\> option*’: No such file or directory

Список файлов:

HAPPY_PLUS_OPTIONS/
o*
op*
> option[value='2016']
> option[value='ALFA ROMEO']
README.md
rspec_conversions/
.rubocop.yml
SAD/
SAD_PLUS_OPTIONS/
Майкл Даррант
источник
Вы пытались использовать групповые символы? rm * option *
RageAgainstTheMachine
Следующий вопрос выглядит смешно, но вы пробовали файловые менеджеры GUI?
Инснис Мрси

Ответы:

16

другой вариант

ls -i 

которые дают (с правильным значением инода)

5233 > option[value='2016']   5689 foo

тогда

find . -inum 5233 -delete

optionnaly (для предварительного просмотра)

find . -inum 5233 -print

Вы также можете добавить, -xdevесли есть другая файловая система ниже.

Archemar
источник
9

Вы также можете использовать опцию "-", которая в соответствии с человеком:

 The rm command uses getopt(3) to parse its arguments, which allows it to
 accept the `--' option which will cause it to stop processing flag options at
 that point.  This will allow the removal of file names that begin with a dash
 (`-').  For example:
       rm -- -filename

Итак, я попробовал:

touch -- "> option[value='2016']"

И удалил это с:

rm -- "> option[value='2016']"

Самый простой способ проверить правильность ввода имени файла:

rm -- ">[tab]

И пусть автозаполнение сделает всю работу.

PS: Как бы заманчиво это ни звучало, не создавайте имя файла "-rf *". Могут случиться плохие вещи.

-rw-r--r--    1 stephan  staff      0 Sep 13 14:11 -rf *

Всегда используйте «-i», чтобы быть в безопасности.

iMac:~ stephan$ rm -i -- "-rf *"
remove -rf *? Y
Стефан Бурло
источник
Это, безусловно, лучший ответ, безусловно.
8

Первоначальная проблема была ведущим местом, таким образом

rm " > option[value='2016']"
    ^ here

работает.

Обновлен вопрос о файлах, начинающихся с> и т. Д.

Майкл Даррант
источник
3

Для интерактивного подхода (часто более безопасного):

Если в текущем каталоге есть какие-то специальные именованные файлы.

Вы можете использовать rm ./и затем TabTabсписок файлов, а затем вы можете выбрать файл и удалить его.

Shellmode
источник
Введите Tabдважды, чтобы найти файлы.
Shellmode
1

В этом rmнет ничего волшебного >. Вам нужно только убедиться, что угловая скобка доходит до него (= не допускать, чтобы оболочка интерпретировала его как перенаправление).

> "> option[value='2016']"  #create it
rm "> option[value='2016']" #remove it

#remove all files in the current directory that have > in them
rm -- {,.}*\>*                 

Если вы работаете в разумной современной системе, вы сможете получить правильно экранированные имена с помощью табуляции.

PSkocik
источник