2013-11-27 55 views
1

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

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

#method, then 
mv IMG_0101.JPG IMG_0101.JPG.JPG 
else mv IMG_0101 path/to/destination 
+2

軋製回到上次編輯,因爲你基本不改變的問題,並把它變成[您的其他問題]的副本(http://stackoverflow.com/questions/20238687/moving - 多 - 文件 - 在目錄,也就是說,有重複的文件,名稱)。 – tripleee

回答

1
for file in "$source"/*; do 
    newfile="$dest"/"$file" 
    while [ -e "$newfile" ]; do 
     newfile=$newfile.JPG 
    done 
    cp "$file" "$newfile" 
done 

這裏有一個競爭條件(如果另一個進程可以創建同名第一donecp之間的文件),但這是相當的理論。

這不難想出一個不太原始的重命名策略;或許用數字後綴加.JPG代替.JPG

+0

我同意,我會在最後加上另外兩位數字,非常感謝您的幫助! – user3038305

0

使用文件的上次修改時間戳標記每個文件名,如果它是相同的文件,則不會再次複製它。

這裏,你可以用它來從「從」目錄將文件移動到「爲」目錄中的bash腳本具體:

#!/bin/bash 

for f in from/* 
do 
    filename="${f##*/}"`stat -c %Y $f` 
    if [ ! -f to/$filename ] 
    then 
    mv $f to/$filename 
    fi 
done 

下面是一些示例輸出(使用上面的代碼的腳本調用「 movefiles「):

# ls from 
# ls to 
# touch from/a 
# touch from/b 
# touch from/c 
# touch from/d 
# ls from 
a b c d 
# ls to 
# ./movefiles 
# ls from 
# ls to 
a1385541573 b1385541574 c1385541576 d1385541577 
# touch from/a 
# touch from/b 
# ./movefiles 
# ls from 
# ls to 
a1385541573 a1385541599 b1385541574 b1385541601 c1385541576 d1385541577 
相關問題