Инструменты Unix: что, если файл называется минусом?
Мне всегда интересно: большинство инструментов GNU / Unix используют опции в форме «минус-то», иногда за ними следует аргумент. Что делать, если у вас есть файл с именем минус-то?
$ ls -f $ rm -f $ ls -f $ mv -f abc mv: missing destination file operand after `abc' Try `mv --help' for more information. $ cat -f cat: invalid option -- 'f' Try `cat --help' for more information.
или
$ ls -ohello.c $ gcc -ohello -ohello.c gcc: fatal error: no input files compilation terminated.
Это просто из любопытства; Для этого у меня нет прецедента.
- Bash цитирует unescaped при подстановке команд
- Как Unix ищет исполняемые файлы?
- Генератор случайных паролей: многие, в столбцах, в командной строке, в Linux
- Завершение процесса в unix вместо его прерывания
- Различия и выполнение `set` &` env`?
- Как закрыть все фоновые процессы в unix?
- Scripting: что проще всего извлечь значение в теге XML-файла?
- Что происходит с запущенными процессами, когда я теряю удаленное соединение с полем * nix?
- Могу ли я контролировать локальный домен домена unix, например, tcpdump?
- Launchd выполняет команду при изменении или изменении содержимого папки
- Легкий способ индексирования STDOUT (форматировать текст в столбцах)?
- Windows PowerShell эквивалентна Unix / Linux `pwd`?
- Unix zip, но исключил определенные подкаталоги (и все в них)
Чтобы удалить файл с именем -x
, используйте rm -- -x
( --
означает конец опций) или rm ./-x
.
Довольно часто задавать этот вопрос в настройках интервью. Общим способом обработки файлов с тире является либо:
$ rm -- -f $ rm ./-f
Общий вопрос в Unix. Основной способ – указать полное имя пути к файлу, поэтому перед ним нет черты:
$ rm -file.txt unknown option -l $ rm ./-file.txt #No problem! $ rm $PWD/-file.txt #Same thing
Некоторые команды, вы можете использовать тире самостоятельно (или двойную тире), чтобы закончить параметры. Однако это не обязательно верно для всех команд или даже для одной и той же команды в разных системах.
$ rm -- -file.txt #Works on Linux but not on some Unix systems
Вы должны использовать
rm -- <filename>
Пример:
rm -- -f