На этот вопрос уже есть ответ здесь:
У меня есть этот файл в моей машине linux:
----------9976723563nneh4_-----192.9.200.4
Я пытаюсь удалить этот файл, но не могу, как все здесь:
что нужно добавить в rm, чтобы удалить этот файл?
rm "----------9976723563nneh4_-----192.9.200.4"
rm: illegal option -- --------9976723563nneh4_-----192.9.200.4
usage: rm [-fiRr] file ...
.
rm '----------9976723563nneh4_-----192.9.200.4'
rm: illegal option -- --------9976723563nneh4_-----192.9.200.4
usage: rm [-fiRr] file ...
rm -- ----------9976723563nneh4_-----192.9.200.4
Вам нужны -
, чтобы сообщить rm
(и более или менее всем остальным программам GNU), что все следующие параметры являются именами файлов, даже если начиная с "-". В противном случае (и в вашем случае) имя файла путают с параметрами. Другая возможность -
rm ./----------9976723563nneh4_-----192.9.200.4
Править 1
Называя этот тривиальный ответ «отличным решением», я чувствую себя обязанным поднять его на более высокий уровень. Основная проблема не может быть решена "лучше", но вы можете попытаться привыкнуть всегда приводить -
аргумент. И некоторый шелл-код (замена rm на функцию оболочки) может помочь вам в этом:
rm () {
local args sep_found=no
args=("$@")
while [ $# -gt 0 ]; do
if [ "--" = "$1" ]; then
sep_found=yes
break
fi
shift
done
if [ "yes" = "$sep_found" ]; then
command rm "${args[@]}"
else
echo "WARNING: rm called without '--' seperator."
echo "Please correct the command; aborting."
fi
}
Вы можете поместить это, например, в ~ / .bashrc
.
На странице руководства для rm
:
Чтобы удалить файл, имя которого начинается с '-', например '-foo', используйте один из этих команды:
rm - -foo
rm ./-foo[1286 providedso, чтобы удалить ваш файл, попробуйте
rm - ---------- 9976723563nneh4 _----- 192.9.200.4
.