如何遍历文件夹中的每个文件?

时间:2011-10-27 20:16:00

标签: bash shell

我有一个名为考试的文件夹。这个文件夹有3个文件夹,分别是数学,物理和英语。所有这些文件夹中都包含一些子文件夹和文件。我想遍历每个文件夹并在另一个名为files的文件上打印每个文件夹和文件的路径。我做到了这一点:

#!/bin/bash

LOC="/home/school/exam/*"

{
  for f in $LOC 
  do
   echo $f
  done
 } > "files"

我得到的出口是:

/家庭/学校/检查/数学

/家庭/学校/检查/物理

/家庭/学校/考试/英语

我无法弄清楚如何使代码访问并对考试的子文件夹做同样的事情。有什么建议?

PS我只是shell脚本的初学者。

5 个答案:

答案 0 :(得分:3)

find /home/school/exam -print > files

答案 1 :(得分:2)

使用globstar选项时bash会在使用两个相邻的星星时递归子目录中的所有文件名

使用:

shopt -s globstar
for i in /home/school/exam/**

此处的引用为man bash

globstar
                      If set, the pattern ** used in a pathname expansion context
                      will match all files and zero or more directories and
                      subdirectories.  If the pattern is followed by a /, only
                      directories and subdirectories match.

info bash

          *      Matches any string, including the null string.  When  the
                 globstar  shell  option  is  enabled,  and * is used in a
                 pathname expansion context, two adjacent  *s  used  as  a
                 single  pattern  will  match  all  files and zero or more
                 directories and subdirectories.  If followed by a /,  two
                 adjacent  *s  will match only directories and subdirecto‐
                 ries.

答案 2 :(得分:0)

您可以使用find命令,它可以获取所有文件,然后您可以对它们执行某些操作,例如使用exec或xargs。

答案 3 :(得分:0)

您还可以使用大多数* nix发行版中包含的tree命令。 (虽然Ubuntu是一个值得注意的例外 - 但可以通过apt-get安装)

LOC="/home/school/exam/"
tree -if $LOC > files

答案 4 :(得分:-1)

如何以递归方式列出所有文件。

for i in *; do ls -l $i ; done