2012-01-05 10 views
1

OK、とても簡単です。特定の拡張子を持つファイルをディレクトリ内で再帰的に検索し、それらのファイルに対してアクションを実行したいと思います。再帰的に一致する引数の絶対パスを返すには? (BASH)

# pwdは(悪い)
ない出力を失敗しますが、成功した... /dir/fileinthisfolder.txt

The file /dir/reallyinsubfolder.txt does not exist.をENTER⬅静かに開きます(良い)

このはない
/dir

# ls -R | grep .txt | xargs -I {} open {}をENTER私が間にあるすべてのファイルを見つけるしかし、のみOPENの "1レベル"の深さに発生します。この場合、/dir/reallyinsubfolder.txtを開こうとする試みは失敗します。reallyinsubfolder.txtは実際には/dir/sub/reallyinsubfolder.txtです。それは、ファイルを実行するための正しいサブディレクトリにまで達しないよう

は私が.. grepのは、単純にマッチしたファイル名...その後(この場合は)チョーク、openコマンドを返していることを理解し

grepはどのようにしてマッチの完全なパスを返すのですか?

答えて

1
find . -name *.txt -exec open {}; 

(ご必要のバックスラッシュで飾り)

1

私はあなたが間違った質問をしていると考えています。 parsing ls(1) output in this fashion is far more trouble than it is worth。はるかに確実に働くだろう何

find /dir -name '*.txt' -print0 | xargs -0 open 

または

find /dir -name '*.txt' -exec open {} \; 

find(1)ls(1)とほぼ同じくらいの名前をマングルし、はるかに信頼性がマッチしたファイル上でプログラムを実行しますしません。 findコマンドの使用について

2

方法 -

find /path/to/dir -type f -iname "*.txt" -exec action to perform {} \; 
関連する問題