我很难弄清楚如何将一个命令的输出作为参数传递给另一个命令。
具体来说,我想传递 FreeBSD 中文件的扩展属性列表,其中lsextattr,并将其输出传递给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
请帮忙......
答案1
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 ...)
外循环的部分。