1

Linux シェル スクリプトを使用するのはこれが初めてで、非常に強力に思えますが、まだ少し混乱しています。

ディレクトリ内の特定の拡張子を持つすべてのファイル(すべてのサブディレクトリ、サブサブディレクトリなど)を再帰的にループし、実行可能ファイルを実行して、元のファイルの正確な場所に同じ名前で異なる拡張子を持つ新しいファイルを生成したい.

以下は、その擬似コードです。

files = list of all files (full path not just names) with extension .ext recursively

for file in files
    executable -option1 -option2 fullpath/file.ext1 > fullpath/file.ext2
4

2 に答える 2

6
  find . -name '*.ext1' -type f -exec sh -c \
    'executable -option1 -option2 ${0} > ${0%.ext1}.ext2' {} \;

findは、ファイル ツリーを再帰的にたどる標準ツールです。最初の引数 (この場合は '.'、現在の作業ディレクトリを意味します) は、下降を開始するツリーのベースを指定します。引数は、-name指定されたファイル名に一致するファイルに検索の範囲を制限します。さらに-type f、検索を通常のファイルに制限します (ディレクトリやその他のエンティティとは対照的に)。この-execオプションは、以前の仕様に一致するすべてのファイル (名前が ".ext1" で終わる通常のファイル) で指定されたコマンドを実行するように find に指示しますsh。ファイル名を操作するには、厳密には移植性がないため、ファイル名を操作しようとしてもfind: とまったく同じように指定する必要があります{}

${0%.ext1}is シェル構文はファイル名 (is の値は、 find でvia$0の最初の引数として渡すため、ファイル名です) を取り、末尾の ".ext1" を取り除きます。その結果の文字列に「.ext2」を追加して、目的の出力ファイルを取得します。sh{}

于 2013-10-16T23:18:19.120 に答える