Unix的。目录及其子目录

时间:2017-09-13 11:40:36

标签: unix

我有一个问题。这是我作业的一部分,我真的不知道该怎么做。 我有一个包含目录树和一个名为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

1 个答案:

答案 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 --parentsrsync之类的内容将文件复制到任何目录,这也将创建所需的目录结构,而无需手动处理。