2013-11-27 55 views
0

任何人都可以幫助我解決這個問題嗎?在具有重複文件名的目錄中移動多個文件

我想從我的USB複製圖像到我的電腦上的檔案,我決定做一個BASH腳本,使這項工作更容易。我想複製文件(即IMG_0101.JPG),並且如果檔案中已經有一個具有該名稱的文件(每當我使用它時都會有我擦拭相機的情況),那麼該文件應該命名爲IMG_0101.JPG.JPG我不會丟失文件。

#!/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. 

意外的標記網絡連接,我得到的錯誤,但如果語句需要在那裏,所以我需要的特定文件,越來越移動。

+0

爲什麼不乾脆前綴每everyfile與和索引號?或者你甚至可以用這個數字來替換整個名字,因爲這個文件的名字對你來說並不重要。 –

+0

你應該確保你*不會*用'mv'覆蓋任何現有的文件,甚至不是由於腳本中的錯誤。爲此只需將選項'-n'添加到'mv'。 – scai

+0

你似乎混淆了'newfile'和'dupefile'。堅持一個或另一個。 – tripleee

回答

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錯誤。)

+0

它現在說,沒有這樣的文件或目錄,即使我已經進行了測試並且表示它們在那裏... – user3038305

+0

修復了您的縮進,並且它將變得更容易看到屬於哪個哪裏。 – tripleee

+0

有一個額外的'做'在那裏,它現在說mv:不能stat「$ 1(顯然我的源文件夾,這是正確的,因爲它被測試,但沒有文件存在。)」/ IMG_ [0-9] [ 0-9] [0-9] [0-9] .JPG。我找到了$ 1 -name「IMG_ [0-9] .... JPG」-exec'{}'$ 2 \; <複製所有文件但不復制的工作,所以我知道新代碼存在問題 – user3038305

相關問題