这是我的第一个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
答案 0 :(得分:1)
您无法防范文件夹和文件名中的空格。
例如:
cp $line $2
应该是:
cp "$line" "$2"
您应该首先通过评估您引用的每个变量并添加“”来消除这些空格作为错误的来源。
如果您仍然收到错误,请向我们提供所使用的参数以及不存在的目录。