2012-03-22 49 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

感谢您的帮助。

PS我使用的cygwin在Win 7

回答

4

你/ r是问题,我会用 “发现” 为您的应用程序的情况下,这是不是一个有效的标识符(正如bash所说的,你需要删除/)。另外,这不会递归到子目录中。如果你的操作很简单,你可以直接使用find的exec选项。 {}是文件名的占位符。

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

否则,尝试像

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

这确实奏效!谢谢 – dawnoflife 2012-03-22 19:32:47

1

喜欢的东西

find . -name "*.txt" -exec doSomeThing {} \; 
+0

有没有办法使用'For'此操作? – dawnoflife 2012-03-22 19:20:01

+1

@dawnoflife:也许你的意思是为'* .txt中的r',但这不会递归到subidrs中(但是你可以在for循环的块中使用r的值,使用'“$ r”'。回应是正确的。bash'for'不理解'/ r',我认为你是从Windows shell中得到的.bash'find'输出由'for'循环块或者'-exec处理doSomething'的功能要强大得多,祝你好运 – shellter 2012-03-22 19:27:35

+0

感谢您的澄清谢谢! – dawnoflife 2012-03-22 19:32:30

2

使用bash:

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

globstar需要Bash版本4。 – 2012-07-11 14:36:48