在目录中移动具有重复文件名的多个文件

时间:2013-11-27 09:37:42

标签: linux bash shell scripting

任何人都可以帮我这个吗?

我正在尝试将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语句需要在那里,所以我需要的特定文件正在被移动。

1 个答案:

答案 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错误。)