Linux 创建bash中每个子目录中所有文件的列表

Linux 创建bash中每个子目录中所有文件的列表,linux,bash,list,loops,subdirectory,Linux,Bash,List,Loops,Subdirectory,我试图在bash中编写脚本,该脚本将在所有子目录上循环,从给定路径开始,并将创建包含当前目录中所有文件的md5总和的列表 我需要类似于ls-R的东西,但我不确定如何开始有一种非常简单的方法: 该命令查找所有文件(-type f),并在每个文件上执行命令md5(-exec md5{}\;)。还有一个名为tree的程序,但您只能用shell内置程序模拟它: #!/bin/sh DIR=${1:-`pwd`} SPACING=${2:-|} cd $DIR for x in * ; do [

我试图在bash中编写脚本,该脚本将在所有子目录上循环,从给定路径开始,并将创建包含当前目录中所有文件的md5总和的列表


我需要类似于
ls-R
的东西,但我不确定如何开始有一种非常简单的方法:


该命令查找所有文件(
-type f
),并在每个文件上执行命令md5(
-exec md5{}\;
)。

还有一个名为tree的程序,但您只能用shell内置程序模拟它:

#!/bin/sh
DIR=${1:-`pwd`}
SPACING=${2:-|}
cd $DIR
for x in * ; do
    [ -d "$DIR/$x" ] &&  echo "$SPACING\`-{$x" && $0 "$DIR/$x" "$SPACING  " || \
    echo "$SPACING $x : MD5=" && md5sum "$DIR/$x"
done
注意,它需要一个完整路径参数(对于当前目录,则不需要)

它的速度不如find快(尽管有很多方法可以加快速度,使代码更复杂),但它给出了树结构的图形表示。
您可以通过添加-
&&[!-L“$DIR/$x”]
将其修改为不遵循符号链接,或者仅列出目录:删除
| echo$SPACING$x

不错,但它会在所有文件上循环,甚至在隐藏目录中。有没有办法只在普通目录上循环?您可以排除搜索以
开头的目录,搜索以
非路径“*/.*/*”
开头的目录,搜索以
非名称“*”开头的文件。有没有理由避免使用
-exec md5{}+
来代替?这是另一个问题;)。但是
md5{}+
等同于
md5 file1 file2 file3…
md5{}等同于
md5文件1;md5文件2;md5文件3这是如何回答这个问题的?@AdrianFrühwirth是的,我在第一次阅读时错过了md5sum部分,但它是一个循环所有子目录的shell脚本。。。只需在文件行的
echo“$SPACING$x”
后面添加md5sum,类似于
&&md5sum“$DIR/$x”
。。。忘了提到它也需要一个完整的路径参数
#!/bin/sh
DIR=${1:-`pwd`}
SPACING=${2:-|}
cd $DIR
for x in * ; do
    [ -d "$DIR/$x" ] &&  echo "$SPACING\`-{$x" && $0 "$DIR/$x" "$SPACING  " || \
    echo "$SPACING $x : MD5=" && md5sum "$DIR/$x"
done