我有一个问题。这是我作业的一部分,我真的不知道该怎么做。 我有一个包含目录树和一个名为sumy.md5的文件的存档。我必须搜索此树中的每个文件,并检查它们的校验和是否也在sumy.md5文件中。如果他们是我必须将他们移动到另一个目录。 如果有人能告诉我如何浏览整个目录并检查文件的校验和是否也在文件sumy.md5
,我将非常感激。到目前为止我尝试过的代码。
for f in (find ./AA/* -type f )
while read -r file;
do
b=$(md5sum $file | cut -d' ' -f1)
if [ $a == $b ] then
echo "Found It"
else echo "File not found"
fi
done < sumy.md5
答案 0 :(得分:1)
您的脚本存在一些问题。复制评论和格式:
# the following line has a syntax error (missing "$")
# but it's also not used in the loop
for f in (find ./AA/* -type f )
# syntax error here trying to jump into the while loop
while read -r file; do
b=$(md5sum $file | cut -d' ' -f1)
# the variable "a" is never defined
if [ $a == $b ]
then
echo "Found It"
else
echo "File not found"
fi
done < sumy.md5
上面似乎迭代了目录中的文件(错误地),然后遍历sumy.md5文件中的每一行。如果md5内容是从md5sum
输出的,那么你可能只使用--check
选项,但如果不是,那么使用像grep这样的东西搜索内容会更容易。
for file in $( find ./AA/* -type f )
do
b=$(md5sum $file | cut -d' ' -f1)
# "q" just exits with status code, 0 or 1 on found or not
# "i" says to ignore case
if grep -qi "$b" "sumy.md5"
then
echo "Found It"
else
echo "File not found"
fi
done
如果找到,请使用cp --parents
或rsync
之类的内容将文件复制到任何目录,这也将创建所需的目录结构,而无需手动处理。