Unix。目录中所有文件的校验和及其子目录
问题描述:
我有一个问题。这是我家庭作业的一部分,我真的不知道该怎么做。 我有一个存档,其中包含目录树和一个名为sumy.md5的文件。我必须搜索此树中的每个文件,并检查它们的校验和是否也在sumy.md5文件中。如果他们是我必须将他们移动到另一个目录。 我会很感激,如果有人能告诉我如何通过整个目录,并检查文件的校验和是否也在文件中sumy.md5Unix。目录中所有文件的校验和及其子目录
我到目前为止试过的代码。
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
答
有一些问题,你的脚本。复制您的评论和格式:
# 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文件的每一行迭代。如果从md5sum
输出md5内容,那么你可能只需要使用--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
要复制文件到任何目录,这也将无需手动处理它创建所需的目录结构。
+1
谢谢你,先生:)你的版本似乎更好,更容易。这真的很有帮助。我甚至没有考虑过grep。我将学习如何使用正确的粘贴代码格式,但我的考试即将到来,现在我没有太多时间。还有一个问题。我还必须制作移动文件的符号链接。符号链接中的路径必须是相对的。 –
到目前为止您尝试过什么?这听起来像一个简单的bash脚本将工作 – BurnsBA
为f(找到./AA/*-type f) 而读取-r文件;做 B = $($的md5sum文件|切-d”'-f1) 如果[$ A == $ B] 然后 回声 “发现” 其他 回声 “找不到文件” 网络 做
编写代码是作业的一部分。有时被忽视的是将问题分解成更小的部分的技巧。听起来好像你的作业有几个步骤:(1)浏览一个目录树,(2)检查文件的md5,(3)决定是否移动文件,以及(4)移动文件。你有哪些部分有问题? – stealththeninja