Bash

如何將上一個命令的輸出作為參數傳遞給下一個

  • October 20, 2017

我很難弄清楚如何將一個命令的輸出作為參數傳遞給另一個命令。

具體來說,我想使用lsextattr傳遞 FreeBSD 中文件的擴展屬性列表,並將其輸出傳遞給rmextattr以刪除所有擴展屬性。是的,我需要這樣做,因為 rmextattr 沒有遞歸選項……

我正在嘗試這樣的事情沒有運氣:

# lsextattr -q user some_file.txt | rmextattr user "$1" some_file.txt 
rmextattr: some_file.txt: failed: Attribute not found

我認為 lsextattr 工作正常,但無法將其輸出正確傳遞給 rmextattr!

# lsextattr -q user some_file.txt
DosStream.com.apple.lastuseddate#PS:$DATA   DosStream.AFP_AfpInfo:$DATA

請幫忙……

IIUC,rmextattr一次只能取一個擴展屬性。因此,您將不得不遍歷lsextattr返回的擴展屬性並刪除每個屬性;像這樣的東西:

for attr in $(lsextattr -q user some_file.txt) ;do
   rmextattr user $attr some_file.txt
done

(未經測試 - 我目前無法訪問 FreeBSD 系統)。

針對評論中的問題:

for file in $(find ...) ;do
   for attr in $(lsextattr -q user $file) ;do
       rmextattr user $attr $file
   done
done

我不知道您要考慮的文件的標準是什麼,但是您可以進行試驗,find直到您獲得所需的列表,然後將生成的命令插入$(find ...)外部循環的一部分。

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