2012-03-22 9 views
0

私は複数のサブフォルダを持つフォルダを持ち、各サブフォルダには10-15個のファイルがあります。私はこれらのフォルダ内のテキストファイルに対してのみ特定の操作を実行したい。フォルダには他のタイプのファイルも含まれています。今のところ、単純なforループを作成してすべてのファイルにアクセスしようとしています。サブフォルダのルーピングが機能しないUnix

for /r in *.txt; do "need to perform this on every file"; done

これは助けを-bash: ``/R': not a valid identifier

おかげで私にエラーを与えます。私はあなたのアプリケーションの場合は、 "検索する" を使用します私は勝つ7に

答えて

4

あなたの/ rが問題であり、それはです有効な識別子ではありません(bashによると、/を削除する必要があります)。また、これはサブディレクトリに再帰しません。操作が簡単な場合は、findのexecオプションを直接使用することができます。 {}はファイル名のプレースホルダーです。

find . -name "*.txt" -exec ls -l {} \; 

そうでない場合は、bashで

for r in $(find . -name "*.txt") ; do 
    echo $r 
    #more actions... 
done 
+0

これは動作します!ありがとうございました – dawnoflife

1

cygwinのを使用しています

PS

find . -name "*.txt" -exec doSomeThing {} \; 
よう

何か

+0

この操作に 'For'を使用する方法はありませんか? – dawnoflife

+1

@dawnoflife:おそらく 'for r in * .txt'を意味するかもしれませんが、これはsubidrsに再帰しません(しかし、' $ r "を使ってforループのブロックでrの値を使うことができます。 bash 'for'は'/r 'を理解していないと思いますが、これは '' for'ループブロックや '-exec – shellter

+0

ありがとう! – dawnoflife

2

のようなものを試してください:

shopt -s globstar 
for file in **/*.txt; do ... 
+1

globstarにはBashバージョン4が必要です。 –