2010-07-27 125 views
2

我需要一些帮助来创建shell脚本来在文件夹中的每个文件上运行特定的命令(任何),以及递归地跳入子目录。shell脚本递归遍历文件

我不确定如何开始。

正确方向的一个点就足够了。谢谢。

+0

有实际上呃这样做的方式。最好的解决方案取决于你的目标,所以如果你愿意分享它,你可能会得到更好的答案。 – mvds 2010-07-27 12:47:33

回答

7

要应用的命令(比如,echo)到当前路径下的所有文件,使用

find . -type f -exec echo "{}" \; 

的目录,使用-type d

+0

谢谢!这让我得到了我需要的东西! – Kirby 2010-07-27 13:03:39

2

要递归列出所有文件

find . -name '*' 

而且可以说,比如你想在那么每个文件“grep的” -

find . -type f -name 'pattern' -print0 | xargs -0 grep 'searchtext' 
+0

'-name'*''不是你想要的。它应该是'-type f'来匹配只有文件。要执行命令,请使用-exec而不是管道。 – Borealid 2010-07-27 12:43:46

+1

grepping'/ dev/urandom'可能需要一段时间;-)我建议添加'-type f' – mvds 2010-07-27 12:45:55

+0

是的。感谢您的更正。 – Gopi 2010-07-27 12:46:46

7

你应该看find命令。

例如,更改权限的所有JPEG文件的/tmp目录下:

find /tmp -name '*.jpg' -exec chmod 777 {} ';' 

虽然,如果有大量的文件,你可以用xargs结合起来批量起来,是这样的:

find /tmp -name '*.jpg' | xargs chmod 777 

而且,在支持空分离findxargs实现:

find /tmp -name '*.jpg' -print0 | xargs -0 chmod 777 
2

猛砸4.0

#!/bin/bash 
shopt -s globstar 
for file in **/*.txt 
do 
    echo "do something with $file" 
done 
+0

工程就像一个魅力! – ryancheung 2013-09-09 04:14:22