0

私はLinux(Ubuntu 11.10)マシンを使用しています。再びシェルをボーンします。

Pythonスクリプトを使用してファイルでいっぱいのディレクトリを処理する必要があります。私の同僚はPythonスクリプトを作成しましたが、以前は一度に1つのファイルで正常に使用していました。2つの引数を取ります。引用符で囲まれた処理対象のファイルへのパスと-min、整数を必要とする呼び出される2番目の引数です。また、スクリプトは標準出力に書き込みます。

シェルスクリプトの経験とこのフォーラムで他の人をフォローした経験から、次の方法を使用してファイルのディレクトリを反復処理しました。

for f in path/to/data_directory/*; do
  path/to/pythonscript.py $f -min 1 > path/to/out_directory/$f;
done

で目的のファイル名を取得しますout_directory。それぞれの内容は、Pythonスクリプトだけが記述できるものです。つまり、上記のforループはファイルをスクリプトに正常に渡します。ただし、各ファイルの内容の性質は完全に間違っています(計算ではスクリプトが間違っていたように)。内のファイルの1つでPythonスクリプトを実行するdata_directoryと、出力ファイルの内容が正しくなります(スクリプトによって実行される計算は正しいです)。

それをより複雑にしているのは、同じシェルメソッド(forループ)が私の同僚が持っているMacOSXで完全に機能することです。

問題はどこにありますか?Linuxシェルについて非常に基本的な何かが欠けていますか?多分それは構文エラーですか?

どんな助けでもありがたいです。

更新:forループを再度実行しましたが、ファイルのdata_directoryを指す代わりに、data_directory内のファイルを指しました。私は同じ問題を抱えていました-Pythonスクリプトは正しい結果を計算しませんでした。

4

2 に答える 2

1

私が目にする唯一の問題は、ファイル名に空白が含まれている可能性があることです。そのため、ファイル名を引用する必要があります。

for f in path/to/data_directory/*; do
  path/to/pythonscript.py "$f" -min 1 > "path/to/out_directory/$f"
done
于 2012-08-13T04:20:25.823 に答える
0

まあ、これが役立つかどうかはわかりませんが。

path/to/pythonscript.py $f -min > path/to/out_director/$f

に置き換えます

path/to/pythongscript.py path/to/data_directory/myfile -min 1 > path/out_directory/path/to/data_directory/myfile

スクリプトは

cd path/to/data_directory
for f in *; do
path/to/pythonscript.py $f -min 1 >  path/to/out_directory/$f
done

どのバージョンの bash を実行していますか?

このスクリプトを実行すると何が得られますか?

cd path/to/data_directory
for f in *; do
echo $f > /tmp/$f
done

もちろん、独自のファイル名を含む一連のファイルが得られるはずです。

于 2012-08-13T04:44:41.023 に答える