ファイル名に依存するフラグ引数を使用して、各ファイルに対してコマンドを実行します。

ファイル名に依存するフラグ引数を使用して、各ファイルに対してコマンドを実行します。

次の名前のファイルを含むフォルダがあるとします。

file1.txt
file2.txt
file2.txt

など。次のようにそれぞれに対してコマンドを実行したいと思います。

mycommand file1.txt -o file1-processed.txt
mycommand file2.txt -o file2-processed.txt
mycommand file3.txt -o file3-processed.txt

など。

-processedこのサイトにはいくつかの同様の質問があります。違いは、拡張子の前のファイル名の途中にテストを挿入したいことです。

find作業のためのツールになりそうです。旗なしでも-oできます

find *.txt -exec mycommand "{}" ";"

ただし、{}構文はなどのように完全なファイル名を提供するため、ファイル名と拡張子の間に ""を追加することfile1.txtはできません。-processed単純なbashループを使用するとfor同様の問題があります。

これを行う簡単な方法はありますかfind

ベストアンサー1

処理するすべてのファイルが同じフォルダにある場合は必要ではなく、デフォルトのシェルfindワイルドカードを使用できます。

for foo in *.txt ; do
  mycommand "${foo}" -o "${foo%.txt}-processed.txt"
done

シェルイディオムは、パターン${foo%bar}(この場合は拡張子)に一致する最小のサフィックス文字列を値から削除するため、必要なサフィックスに置き換えることができます。barfoo.txt

おすすめ記事