我有一个名为考试的文件夹。这个文件夹有3个文件夹,分别是数学,物理和英语。所有这些文件夹中都包含一些子文件夹和文件。我想遍历每个文件夹并在另一个名为files的文件上打印每个文件夹和文件的路径。我做到了这一点:
#!/bin/bash
LOC="/home/school/exam/*"
{
for f in $LOC
do
echo $f
done
} > "files"
我得到的出口是:
/家庭/学校/检查/数学
/家庭/学校/检查/物理
/家庭/学校/考试/英语
我无法弄清楚如何使代码访问并对考试的子文件夹做同样的事情。有什么建议?
PS我只是shell脚本的初学者。
答案 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