一個簡短的問題。 的命令Linux xargs命令
cat * | wc -c
不需要xargs的,但命令
ls | xargs echo
需要xargs的命令。 可以請某人更清楚地向我解釋xargs的概念。 謝謝。
一個簡短的問題。 的命令Linux xargs命令
cat * | wc -c
不需要xargs的,但命令
ls | xargs echo
需要xargs的命令。 可以請某人更清楚地向我解釋xargs的概念。 謝謝。
總之,xargs
將stdin
(標準輸入)轉換爲您指定的命令的參數。例如
$ seq 1 3
1
2
3
$ seq 1 3 | xargs echo
1 2 3
seq
,你可以看到,打印序列stdout
。我們pipe(|
)輸出到xargs
在stdin
。 xargs
調用echo
與stdin
作爲參數,所以我們得到echo 1 2 3
。
如el.pescado said,wc
接受stdin
的輸入(您也可以給它一個文件參數)。由於cat
將文件打印到stdout
,因此可以將其直接傳送到wc
。
$ cat text
This is only
a test
$ cat text | wc
2 5 20
$ wc text
2 5 20 text
echo
不接受任何stdin
。這很奇怪,因爲echo
的工作是打印到stdout
- 你可以打印任何你想要的東西。因此,您使用xargs
將流轉換爲參數。
echo
可能太微不足道了,看看發生了什麼,所以這裏有一個更真實的例子。說我們已經有了一些文件的目錄中它:
$ ls
bar1 foo1 foo2 foo3 foo4 foo5 foo6
我們已經受夠了這裏foo
,我們要刪除所有的人,但我們不能被人打擾鍵入rm foo1 foo2 ...
。畢竟,我們是程序員,而且我們很懶。我們所能做的是...
$ ls foo* | xargs rm
$ ls
bar1
rm
預計參數,ls foo*
我們要刪除所有文件打印,並xargs
做翻譯。
作爲一個側面說明,有時你想stdin
分割成小塊。 xargs -n
對此非常有用,並且一次將N個參數傳遞給最終命令。
$ ls foo* | xargs -n2 echo
foo1 foo2
foo3 foo4
foo5 foo6
wc
從其標準輸入讀取數據,而echo
打印其命令行參數。
謝謝,這是一個非常好的解釋。 真的很感激。 –