Невозможно удалить файл с именем, подобным аргументу команды [duplicate]

20

Я случайно создал файл с именем -r в моем домашнем каталоге. Теперь я не могу избавиться от него:

rm -rf
rm: missing operand
Try 'rm --help' for more information.

Другие попытки:

rm /-/r
rm: cannot remove ‘/-/r’: No such file or directory

Другой:

rm \-r
rm: missing operand
Try 'rm --help' for more information.

Есть ли способ удалить этот файл без удаления всего каталога?

    
задан Justin 12.06.2014 в 10:47
источник

5 ответов

25

В этом случае вы должны использовать двойную тире ( -- ) в своих аргументах команды.

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

Итак, введите rm -- -r и вы должны избавиться от этого файла.

    
ответ дан Benoit 12.06.2014 в 10:49
источник
44

Есть много способов сделать это:

  1. Используйте -- , что означает конец флажков параметров и начало списка аргументов для многих программ (в том числе rm ).

    rm -- -r
    
  2. Использовать полный путь

    rm /home/you/directory/-r
    

    или, из того же каталога (ваш текущий каталог называется . ):

    rm ./-r
    
  3. Использовать find

    find . -name "-r" -exec rm {} \;
    

    или, чтобы получить все такие файлы

    find . -name "-*" -exec rm {} \;
    
  4. Используйте уродливый взлом. Переместите все в другую директорию (это не удастся для файла -r по той же причине, что и rm ), а затем удалите исходный каталог (который удалит файл) и переместите все обратно. Итак, если ваш файл -r находится в ~/foo :

    $ mkdir ~/bar
    $ for f in *; do mv "$f" ../bar/; done
    mv: invalid option -- 'r'
    Try 'mv --help' for more information.
    $ rm -rf ~/foo
    $ mkdir ~/foo && cd ~/foo
    $ mv ~/bar/* .
    $ rmdir ~/bar
    
ответ дан terdon 12.06.2014 в 10:59
8

Вы также можете удалить такие файлы (начиная с «-») с помощью этой команды:

rm ./-r

См. справочную страницу rm:

  

Чтобы удалить файл, имя которого начинается с символа '-', например '-foo', используйте       одна из следующих команд:

rm -- -foo

rm ./-foo
    
ответ дан Sylvain Pineau 12.06.2014 в 10:59
2

Или вы можете указать полный путь к каталогу в команде rm ,

Пример:

rm -rf ~/Desktop/-r
    
ответ дан Avinash Raj 12.06.2014 в 11:05
1

Вы также можете использовать команду unlink (если она у вас есть), которая не принимает никаких параметров и один аргумент. Таким образом, unlink -- -r удалит файл с именем -r

    
ответ дан Abigail 12.06.2014 в 15:27