2016-04-14 7 views
0

В Unix,Что это "-" для данной команды xargs команда

ls -t | tail -n +4 | xargs rm -- 

ls -t | tail -n +4 | xargs rm 

какая разница, пожалуйста?

+0

'-' означает конец флажков параметров. Я знаю только по моему вопросу: http://askubuntu.com/questions/419137/how-can-i-remove-a-file-that-looks-like-a-flag. Может быть, он используется в вашем пример – dan08

+0

Разница станет наиболее очевидной в каталоге, содержащем файл с именем '-rf' и еще несколько каталогов. – Jens

ответ

3

-- указывает, что все последующие параметры в командной строке рассматриваются как операнды а не параметры (даже если параметр начинается с - или --).

Таким образом, ls -t | tail -n +4 | xargs rm -- означает, что все параметры, предоставленные xargs, равны rm, будут обрабатываться как имена файлов (то есть операнды).

И в ls -t | tail -n +4 | xargs rm случае, если происходит с именем файла в текущей директории, начиная с - или --, rm будет пытаться интерпретировать его как вариант (и неожиданные результаты более чем вероятно).

0

Что это? «-» ибо в этой команде xargs команда

The -- средства «переключает конец здесь»

+0

... и он не связан с 'xargs', он передается из' xargs' в 'rm' и' rm' (или лучше библиотека 'getopt', используемая для разбора аргументов) прекратит обработку опций (и игнорирует ее). Не все 'rm' могли бы это сделать, но это рекомендация posix. См., Например, документ здесь: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html – eckes