次の名前のファイルを含むフォルダがあるとします。
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}
(この場合は拡張子)に一致する最小のサフィックス文字列を値から削除するため、必要なサフィックスに置き換えることができます。bar
foo
.txt