2016-02-13 21 views
0

我有一個驅動器可以安裝在/ run/media/jeremy/MONSTER上,這些驅動器擁有大量的光圈庫,iPhoto庫和多年的主目錄備份。在bash中複製整個驅動器中的所有照片?

我想追蹤每個gif,jpg,jpeg和加農炮原始文件,並將它們複製到/run/media/jeremy/1.4t_Video/photos,並最好讓它們根據文件創建給出一個唯一的名稱日期。我認爲bash可以完成任務,但不知道如何去做。

+0

看看強大'find'工具。從閱讀手冊頁開始:'man find' ... – arkascha

回答

1
find /run/media/jeremy/MONSTER \(-iname \*.gif -o -iname \*.jpg -o -iname \*.jpeg \) -exec cp {} /run/media/jeremy/1.4t_Video/photos/ \; 

這應該找到這些信息並將其複製到/run/media/jeremy/1.4t_Video/photos/

結尾的所有文件,如果你想添加更多的擴展只需使用-o -iname *。

+0

您應該嘗試解釋這是做什麼 – Jeff

+0

完成謝謝.... –

1

你可以使用一個這樣的腳本:

#!/bin/bash 
serial=0 
find /run/media/jeremy/MONSTER \(-iname \*.gif -o -iname \*.jpg -o -iname \*.jpeg -o -iname \*.cr2 \) -print0 | 
    while read -r -d '' f; do 

     # Get its extension, like "jpg" or "cr2" 
     ext=${f##*.} 

     # Get its date of creation like "2012-01-07 11:06:45" 
     datetime=$(stat --printf="%w" "$f" | sed 's|\..*||') 

     # Formulate a new name 
     new="/output/dir/${datetime}-${serial}.${ext}" 

     # Show what we came up with 
     echo Would copy $f to $new 
     # cp "$f" "$new" 

     ((serial++)) 
    done 

目前,它什麼也不做,只是顯示它會怎麼做。取消第3行到最後一行的註釋,通過在cp前刪除#(如果它看起來正確)。請做好備份第一和試驗用少量文件的...

樣本輸出

Would copy ./b.jpg to /output/dir/2016-02-11 10:40:58-0.jpg 
Would copy ./mosaic/0.jpg to /output/dir/2016-02-08 12:36:06-1.jpg 
Would copy ./mosaic/1.jpg to /output/dir/2016-02-08 12:36:07-2.jpg 
Would copy ./mosaic/10.jpg to /output/dir/2016-02-08 12:36:12-3.jpg 
Would copy ./mosaic/100.jpg to /output/dir/2016-02-08 12:36:41-4.jpg 
Would copy ./mosaic/101.jpg to /output/dir/2016-02-08 12:36:42-5.jpg 
Would copy ./mosaic/102.jpg to /output/dir/2016-02-08 12:36:42-6.jpg 
Would copy ./mosaic/103.jpg to /output/dir/2016-02-08 12:36:42-7.jpg 
相關問題