8

実行しているパフォーマンステストのために、大きなテキストファイルをいくつかの小さなファイルに分割しました。このようなディレクトリがいくつかあります。

/home/brianly/output-02 (contains 2 files myfile.chunk.00 and myfile.chunk.01)
/home/brianly/output-04 (contains 4 files...)
/home/brianly/output-06 (contains 6 files...)

各ディレクトリにファイルの数が増えていることに注意することが重要です。私がする必要があるのは、出力ディレクトリ内の各テキストファイルに対して実行可能ファイルを実行することです。コマンドは、単一のファイルに対して次のようになります。

./myexecutable -i /home/brianly/output-02/myfile.chunk.00 -o /home/brianly/output-02/myfile.chunk.00.processed

ここで、-iパラメーターは入力ファイルであり、-oパラメーターは出力場所です。

C#では、ディレクトリをループして各フォルダー内のファイルのリストを取得し、それらをループしてコマンドラインを実行します。bashを使用してこのようなディレクトリ構造をトラバースし、その場所とその場所のファイルに基づいて正しいパラメータを使用してコマンドを実行するにはどうすればよいですか?

4

6 に答える 6

8

何かのようなもの:

for x in `find /home/brianonly -type f`
do
./yourexecutable -i $x -o $x.processed
done
于 2009-06-16T19:41:54.673 に答える
8

この種のことのために、私は常にfindをxargsと一緒に使用します:

$ find output-* -name "*.chunk.??" | xargs -I{} ./myexecutable -i {} -o {}.processed

スクリプトは一度に 1 つのファイルしか処理しないため、すでに示唆されているように、 findで-exec (または-execdir ) を直接使用することも同様に効率的ですが、 xargsを使用することに慣れています。一度に多くの引数を操作するコマンド。したがって、ユーティリティ ベルトに入れておくと非常に便利なツールなので、言及する必要があると思いました。

于 2009-06-16T20:06:52.097 に答える
2

他の人が示唆しているように、次を使用しますfind(1)

# Find all files named 'myfile.chunk.*' but NOT named 'myfile.chunk.*.processed'
# under the directory tree rooted at base-directory, and execute a command on
# them:
find base-directory -name 'output.*' '!' -name 'output.*.processed' -exec ./myexecutable -i '{}' -o '{}'.processed ';'
于 2009-06-16T19:56:58.807 に答える
1

提供された情報からすると、これは C# のアイデアを完全に簡単に翻訳したものに思えます。

for i in /home/brianly/output-*; do
    for j in "$i/"*.[0-9][0-9]; do
        ./myexecutable -i "$j" -o "$j.processed"
    done
done
于 2009-06-16T20:25:00.203 に答える
0

そのためのfindコマンドです。

http://linux.die.net/man/1/find

于 2009-06-16T19:41:18.200 に答える
0

検索と実行を使用します。以下をご覧ください

http://tldp.org/LDP/abs/html/moreadv.html

于 2009-06-16T19:46:58.080 に答える