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

Я случайно создал файл с именем -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.

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

21
задан 5 August 2014 в 18:37

4 ответа

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

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

, Таким образом, тип rm -- -r и Вы должны избавиться от этого файла.

25
ответ дан 5 August 2014 в 18:37

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

  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
    
44
ответ дан 5 August 2014 в 18:37

Можно также удалить такие файлы (запускающийся с '-') с этой командой:

rm ./-r

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

Для удаления файла, имя которого запускается с '-', например, '-нечто', используют одна из этих команд:

rm -- -foo

rm ./-foo
8
ответ дан 5 August 2014 в 18:37

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

Пример:

rm -rf ~/Desktop/-r
2
ответ дан 5 August 2014 в 18:37

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

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