2014-08-29 53 views
2

的Linux/bash中,服用对输入线的列表,并使用xargs到每行上工作:制作xargs的在Cygwin的工作

% ls -1 --color=never | xargs -I{} echo {} 
a 
b 
c 

Cygwin的,取1:

$ ls -1 --color=never | xargs -I{} echo {} 
    xargs: invalid option -- I 
    Usage: xargs [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]] 
      [-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-str]] 
      [--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive] 
      [--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs] 
      [--max-args=max-args] [--no-run-if-empty] [--version] [--help] 
      [command [initial-arguments]] 

Cygwin的,取2:

$ ls -1 --color=never | xargs echo 
a b c 

(是的,我知道有中ls -1 --color=never | while read X; do echo ${X}; done的通用方法,我已经测试它瓦特在Cygwin的兽人也一样,但是我正在寻找一种方法,使正确的Cygwin xargs工作)

+0

适合我。也许你应该更新你的xargs? 012g xargs(GNU findutils)4.5.12 由Cygwin封装(4.5.12-1) – user3132194 2014-08-29 08:46:42

回答

1

使用-n说法xargs,这是真的,你应该使用一个,因为-I是起到一个选项给一个说法“名称”这样就可以使他们在命令行中的任何地方出现:

$ ls -1 --color=never | xargs echo 
a b c 
$ ls -1 --color=never | xargs -n 1 echo 
a 
b 
c 

从手册页:

-n max-args 
      Use at most max-args arguments per command line 

    -I replace-str 
      Replace occurrences of replace-str in the initial-arguments with names read from standard input. 
+0

在他的*** Cygwin ***版本中没有'-I'选项。这就是他得到这个错误的原因。但是,你应该使用'-n'来完成OP所需的内容是正确的。(其实,他最好用'find',但这是另一个答案。 – 2014-08-29 13:20:52

2

damienfrancois's答案是正确的。您可能希望使用-n来强制执行echo以一次回显一个文件名。

但是,如果你在考虑每个文件并执行它一次一个真正有兴趣,你可以使用find会更好:

$ find . -maxdepth 1 --exec echo {} \; 

有几件事情:

  • 这将选择以句点开头的文件名(包括'。')
  • 这将在您的文件名前加上./
  • 使用的echo来自/bin/echo而不是内置的shell版本的echo。

但是,它不依赖于执行ls *和可能造成的问题(如着色文件名,或者在子目录打印出文件(你的命令行)的外壳。

的的xargs目的是最小化的特定命令的执行:

$ find . -type f | xargs foo 

在这种情况下,xargs将执行foo仅次数最少数量foo将只执行当COMM并且行缓冲区已满,或者没有更多文件名。但是,如果您在每个名称后强制执行,则最好使用find。它更加灵活,而且不依赖于shell的行为。

+1

find不能轻松地并行化命令,请参阅http://codereview.stackexchange.com/questions/39377/parallelizing-upload/39383#39383但是,这些都是有价值的提示,谢谢! – LetMeSOThat4U 2014-09-03 07:12:55

+0

这应该是'find。-maxdepth 1 -exec echo {} \;'用'-exec'。 – mgaert 2014-12-18 11:15:59

+0

@mgaert谢谢。更正了答案。 – 2014-12-18 16:02:56