2013-11-27 102 views
0

這是我第一次使用bash腳本,我正在努力消除所有的摺痕並使腳本運行良好。該腳本將存檔它在HDD /閃存驅動器上的多個目錄中找到的所有指定的.jpg文件。有一些名稱相同但內容不同的文件,因此我使用了Md5總和來對它們進行哈希處理。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 
+0

你是說它可以在交互式shell中運行,但是當從Geany中調用時不行嗎?你有沒有檢查過哪個工作目錄和參數Geany調用它? (還有,如果你可以使用'fdupes')。 –

+0

您可能打算在第33行寫上'path =「$ 2/$ file」'。 –

+1

您也可以使用http://www.shellcheck.net/來檢查常見錯誤。 –

回答

1

您無法防範文件夾和文件名稱中的空格。

例如:

cp $line $2 

應該是:

cp "$line" "$2" 

你應該評估你引用的每個變量,並加入「」開始通過消除這些空間作爲一個源到你的錯誤的。

如果仍然出現錯誤,請向我們提供使用的參數以及不存在的目錄。