如何返回递归匹配参数的绝对路径? (BASH)

时间:2012-01-05 02:09:22

标签: bash recursion grep command-line-interface

好的,这么简单..我想以递归方式在目录中搜索具有特定扩展名的文件 - 然后对这些文件执行操作。

# pwd 输入
/dir

# ls -R | grep .txt | xargs -I {} open {} ENTER
The file /dir/reallyinsubfolder.txt does not exist.⬅失败(坏)
没有输出,但是成功.. /dir/fileinthisfolder.txt sile默默地打开(好)

这个确实找到了我感兴趣的所有文件......但只有OPEN的那些碰巧是“1级”的文件。在这种情况下,尝试打开/dir/reallyinsubfolder.txt失败,因为reallyinsubfolder.txt实际上是/dir/sub/reallyinsubfolder.txt

据我所知,grep只是返回匹配的文件名...然后扼杀(在这种情况下)open命令,因为它无法到达正确的子目录来执行文件..

如何让grep返回匹配的完整路径?

3 个答案:

答案 0 :(得分:2)

如何使用find命令 -

find /path/to/dir -type f -iname "*.txt" -exec action to perform {} \;

答案 1 :(得分:1)

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

(用你需要的反斜率装饰)

答案 2 :(得分: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)那样破坏名称,并且使匹配文件上的执行程序更加可靠。