前のコマンドの出力を次のコマンドのパラメータに渡す方法

前のコマンドの出力を次のコマンドのパラメータに渡す方法

あるコマンドの出力を別のコマンドにパラメータとして渡す方法を見つけるのに問題があります。

特にFreeBSDのファイルの拡張属性のリストを渡したいと思います。lsextattr、出力を次に渡します。rextattrすべての拡張属性を削除します。はい、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一度に1つの拡張属性しか取得できません。したがって、返された拡張属性を繰り返して、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 ...)外部ループ部分に挿入できます。

関連情報