如何将上一个命令的输出作为参数传递给下一个命令

如何将上一个命令的输出作为参数传递给下一个命令

我很难弄清楚如何将一个命令的输出作为参数传递给另一个命令。

具体来说,我想传递 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 ...)外循环的部分。

相关内容