アルカナが見つかりました: -exec ラインでパイプを動作させることはできません

アルカナが見つかりました: -exec ラインでパイプを動作させることはできません

sedを介して検索結果をxformストリームにパイプし、変換されたストリームをスクリプトの2つの引数のいずれかに使用するにはどうすればよいですか?つまり:

探すfile1.tiff(およびその他のファイル)が表示されます。
sedfile1.tiff --> file1.jpgを変換し
、次の2つのパラメータを使用してコマンドを実行します。file1.tiff file1.jpg 変換

いくつかの方法を試しましたが、取得できません。風味を加えようとする試みは次のとおりです。

find ./out -regex ".*_p[bg]_.*tiff" -exec echo "Processing {}" \; -exec convert {} `echo {} | sed s/tiff/jpg/` \;

このような部分を別にしようと諦めてPythonスクリプトを作成しなければならなかったが、結局Unixツールを学ぼうとしたが、今はすっかり抜けています。助ける!

ベストアンサー1

そこにパイプがあるかどうかはわかりません-execfind -exec echo {} \| sed s/tiff/jpg \;うまくいかないようです。

最良のオプションは、変換を実行するスクリプトを作成することです。

変換_tiff_to_jpg:

#!/bin/bash
echo "Processing $1"
convert "$1" "${1/%tiff/jpg}"

find -exec期待どおりに呼び出してください。

find ./out -regex ".*_p[bg]_.*tiff" -exec convert_tiff_to_jpg {} \;

これを行うために使用できる多くの方法がありますが、find -print0 | xargs -0すべて非常に見苦しいです。

find ./out -regex ".*_p[bg]_.*tiff" -print0 |
while IFS= read -d $'\0' -r filename; do
    echo "Processing $filename"
    convert "$filename" "$(echo "$filename" | sed 's/tiff$/jpg/')"
done

または

find ./out -regex ".*_p[bg]_.*tiff" -print0 |
while IFS= read -d $'\0' -r filename; do
    echo "Processing $filename"
    convert "$filename" "${filename/%tiff/jpg}"
done

または

find ./out -regex ".*_p[bg]_.*tiff" -print0 |
    xargs -0 -I FILE bash -c 'F="FILE"; echo "$F" "${F/%tiff/jpg}"'

ちなみに、ファイル名の終わり以外の場所に表示された場合は変更しないようにs/tiff/jpg変更しました。s/tiff$/jpgtiff

おすすめ記事