1

私はいくつかのフォルダを持っています

Main/  
   /a  
   /b  
   /c    
 ..

abc1.txtこれらの各フォルダーから、abc2.txt入力ファイルとしてそれぞれ python プログラムに入力ファイルを渡す必要があります。現在のスクリプトは、

for i in `cat file.list`
do
echo $i
cd $i
#works on the assumption that there is only one .txt file
inputfile=`ls | grep .txt`
echo $inputfile
python2.7 ../getDOC.py $inputfile
sleep 10
cd ..
done
echo "Script executed successfully"

したがって、.txt ファイルの数に関係なく、スクリプトが正しく動作するようにしたいと考えています。

複数の .txt ファイルの場合に正しい .txt ファイルを取得するための組み込みコマンドがシェルにあるかどうか、誰かに教えてもらえますか?

4

3 に答える 3

3

このfindコマンドは、次の場合に適してい-execます。

find /path/to/Main -type f -name "*.txt" -exec python2.7 ../getDOC.py {} \; -exec sleep 10 \;

説明:

  • find- 呼び出すfind
  • /path/to/Main- 検索を開始するディレクトリ。デフォルトでは、find再帰的に検索します。
  • -type f- ファイルのみを考慮する (ディレクトリなどではなく)
  • -name "*.txt"-.txt拡張子を持つファイルのみを検索します。*これは引用符で囲まれているため、bash はグロビングによってワイルドカードを自動展開しません。
  • -exec ... \;- 見つかった結果ごとに、次のコマンドを実行します。
  • python2.7 ../getDOC.py {};- の{}部分は、 からの検索結果がfind毎回代入される場所です。
  • sleep 10- ファイルに対して python スクリプトが実行されるたびに 10 秒間スリープします。スリープさせたくない場合は、これを削除してください。
于 2012-12-02T17:18:55.383 に答える
1

グロブを使用する方が良い:

shopt -s globstar nullglob
for i in Main/**/*txt; do
    python2.7 ../getDOC.py "$i"
    sleep 10
done

この例は再帰的であり、

于 2012-12-02T17:18:12.140 に答える
0
find . -name *.txt | xargs python2.7 ../getDOC.py
于 2012-12-02T17:15:39.847 に答える