Md5哈希识别和存档图像

时间:2013-11-27 22:33:05

标签: linux bash shell hash md5

这是我的第一个bash脚本,我试图消除所有的折痕,让脚本运行得很好。该脚本用于存档它在HDD /闪存驱动器上的多个目录中找到的所有指定的.jpg文件。有些文件具有相同的名称但内容不同,所以我使用Md5总和来哈希它们。

我在Geany中获取目录不存在错误,但它从命令栏中运行正常,错过了两个图像。我已经尝试了一切我能想到的解决方法。这是乱码吗?

#!/bin/sh

if [ ! -d "$1" ]; then
    echo Directory "$1" cannot be found. Please try again.
    exit
fi

if [ $# -eq 1  ]; then
    echo "usage: Phar image_path archive_path"
    exit
fi

if [ -d "$2" ]; then
    echo "archive exists"
else
    echo "the directory 'archive' does't exist. Creating directory 'archive'."
    mkdir -p ~/archive 
fi

find $1 -iname "IMG_[0-9][0-9][0-9][0-9].JPG" | cat > list.txt

[ -f ~/my-documents/md5.txt ] && rm md5.txt || break 
while read line;
    do md5sum $line | xargs >> md5.txt 
done < list.txt 

sort -k 1,1 -u md5.txt | cat > uniquemd5.txt 
cut -d " " -f 2- uniquemd5.txt > uniquelist.txt 

sort uniquelist.txt -r -o uniquelist.txt
for line in $(cat uniquelist.txt)
do
    file=$(basename $line) path="$2/file"

    if [ ! -f $path ];
    then 
        cp $line $2 
else
        cp $line $path.JPG


  fi

done

1 个答案:

答案 0 :(得分:1)

您无法防范文件夹和文件名中的空格。

例如:

cp $line $2 

应该是:

cp "$line" "$2"

您应该首先通过评估您引用的每个变量并添加“”来消除这些空格作为错误的来源。

如果您仍然收到错误,请向我们提供所使用的参数以及不存在的目录。