Bash
如何將上一個命令的輸出作為參數傳遞給下一個
我很難弄清楚如何將一個命令的輸出作為參數傳遞給另一個命令。
具體來說,我想使用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 ...)
外部循環的一部分。