Shell

用於重定向參數的 Shell 語法?

  • May 28, 2016

如果我想重定向的不是 stdio,而是作為程序輸出的參數,我應該使用 xargs 嗎?

例如,ls我希望文件名是下一個命令的參數,而不是輸入流。

我在說什麼有一個很好的例子嗎?這個例子是膚淺的,但說明了我的意思:使用輸出ls作為參數來cat顯示文件的內容。

首先不要解析ls. 獲取文件名的可靠方法有很多,但不是ls其中之一

下面使用 shell 的 globbing 來生成文件名,並傳遞一個以 nul 分隔的列表,xargs通過它們執行它們cat

printf '%s\0' * | xargs -0 cat

我知道這樣做的目的是展示文件-> xargs。否則,當然,除非有太多文件無法放在命令行上,否則可以將上面的內容替換為:

cat *

更有選擇性

兩者lsprintf '%s\0' *都將顯示目錄的所有內容,包括其子目錄。如果您想更有選擇性,例如,包括正常文件但不包括子目錄,那麼正如 cas 建議的那樣,find是更好的工具:

find . -maxdepth 1 -type f -print0 | xargs -0 cat

或者:

find . -maxdepth 1 -type f -exec cat {} +

find有許多有用的選項。詳情請參閱man find

引用自:https://unix.stackexchange.com/questions/286041