2013-05-23 5 views
1

Мне было интересно, как обращаться с файлами с именами флагов, такими как «-a», «-f» и т. Д. Я не могу передавать их в качестве аргументов для таких программ, как rm или ls, потому что они интерпретируются как флаги, а rm * или ls * просто запускает эти программы с флагами имен файлов (по понятным причинам). Как передать флаги как обычные имена файлов в аргументах программы?Как обращаться с файлами, имена которых являются флагами

ответ

8

Общий Хитрость заключается в том, чтобы префикс ./:

[email protected]:/tmp$ touch ./-a ./-b ./-c 
[email protected]:/tmp$ ls -l ./-* 
-rw-rw-r-- 1 edd edd 0 May 22 21:07 ./-a 
-rw-rw-r-- 1 edd edd 0 May 22 21:07 ./-b 
-rw-rw-r-- 1 edd edd 0 May 22 21:07 ./-c 
[email protected]:/tmp$ rm ./-* 
[email protected]:/tmp$ ls -l ./-* 
ls: cannot access ./-*: No such file or directory 
[email protected]:/tmp$ 
+0

также: rm-- -a будет работать на некоторых, но не во всех системах UNIX. Двойная тире переводится как «конец опций». Это означает, что вызов getopt() не будет пытаться сделать -a опцией вместо имени файла, что является вашим намерением. –

+0

Чтобы добавить к тому, что @jimmcnamara сказал: «Специальный аргумент' --' заставляет во всех случаях завершать проверку параметров. " (цитируется из «Использование функции getopt» http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt) – devnull

Смежные вопросы