任何人都可以帮我这个吗?
我正在尝试将USB中的图像复制到计算机上的存档中,我决定制作一个BASH脚本来简化这项工作。我想要复制文件(即IMG_0101.JPG),如果档案中已经有一个带有该名称的文件(每当我使用它的时候会擦拭我的相机),该文件应该命名为IMG_0101.JPG.JPG so我没有丢失文件。
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Usage: $0 image_path archive_path"
exit 999
fi
if [ -d "$1" ] #Checks if archive directory exists
then
echo Image Source directory FOUND
else
echo ERROR: Image Source directory has NOT BEEN FOUND
fi
if [ -d "$2" ]
then
echo Photo Archive FOUND
else
echo Creating directory
mkdir "$2"
fi
if [ find $1 -name "IMG_[0-9][0-9][0-9][0-9].JPG" ] #added this in to be more specific 1/4
then #2/4
for file in "$1"/*
do
dupefile= "$2"/"$file"
while [ -e "$newfile" ];
do
newfile=$newfile.JPG
done
mv "$file" "$newfile"
done
else #3/4
#do nothing
fi #4/4 took all the /4 out, but it's saying theres no such file or directory, even though I've tested it and it says there is.
意外的令牌fi是我得到的错误,但if语句需要在那里,所以我需要的特定文件正在被移动。
答案 0 :(得分:0)
你不能有空else
。如果您没有else
部分,请取出else
关键字。
另外,你应该摆脱多余的find
。只需循环遍历您真正想要的文件。
for file in "$1"/IMG_[0-9][0-9][0-9][0-9].JPG
do
newfile= "$2"/"$file"
while [ -e "$newfile" ];
do
newfile=$newfile.JPG
done
mv "$file" "$newfile"
done
done
(这也解决了dupefile
vs newfile
错误。)