0
#!/bin/bash
# create a list of checksums
cat /dev/null > MD5SUM
for i in */*/*.sql ; do test -e $i && md5sum $i >>MD5SUM ; done

然后此命令用于检查是否有任何更改:

md5sum -c MD5SUM

它工作正常,一切正常。我只是不明白怎么做。假设我想为我的主目录中的所有文件制作一个校验和列表,我$HOME该怎么做?*/*/*.sqlfor 循环的部分是什么意思?我假设这只是显示 SQL 文件,但我该如何修改呢?假设我想要目录中的所有文件?为什么不只是*.sql?在这种情况下,for 循环的其余部分会做什么?

4

1 回答 1

4

让我们按部分:

cat /dev/null > MD5SUM

这只会“擦除”之前创建的先前 MD5SUM 文件/列表。

for i in */*/*.sql;

这将遍历距当前文件夹深 2 个目录的文件。如果你有文件夹

~/a/b
~/c/d
~/e/f

并且您在主文件夹 (~) 中运行脚本,目录 b、d、f 中的所有“*.sql”都将计算校验和并将其传送到当前目录中的文件 MD5SUM:

do test -e $i && md5sum $i >>MD5SUM ; done

现在回答你的问题:

  1. 假设我想为我的主目录 $HOME 中的所有文件创建一个校验和列表,我该怎么做?

我会使用带有 exec 选项的 find 命令

find $HOME -maxdepth 1 -name \*.sql -exec md5sum {} \;
  1. for 循环的/ /*.sql 部分是什么意思?

我在上面回答了它,无论如何在获取文件之前只深入 2 个目录。

  1. 我假设这只是显示 SQL 文件,但我该如何修改呢?假设我想要目录中的所有文件?

改变

for i in */*/*.sql;

for i in */*/*;

或当前目录

find $HOME -maxdepth 1 -name \* -exec md5sum {} \;
  1. 为什么不只是 *.sql ?在这种情况下,for 循环的其余部分会做什么?

前面解释过了。

希望它有帮助=)

于 2012-04-19T01:56:52.663 回答