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
そこにパイプがあるかどうかはわかりません-exec
。 find -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$/jpg
tiff