Bash
移動和重命名數百個 .jpg 文件,全部命名為 5003.jpg
所以這就是交易,我的女朋友希望我將她所有的照片從她的 iPhone 轉移到她的筆記型電腦上(我們正在執行 Ubuntu 14.04)。我嘗試使用的所有專用程序都不起作用,所以我只是複制了整個 DCIM/ 文件夾,其中包含她 iPhone 上的所有圖片。我的困境是 DCIM/ 分為四個文件夾,然後每個文件夾都包含她的每張照片。在每個文件夾中,每張圖片都有相同的名稱“5003.jpg”。
我想使用命令行將所有這些文件移動並重命名(可能使用升序的數字名稱,例如 0001.jpg、0002.jpg 等)到一個文件夾,例如 ~/Pictures/iPhone/。
到目前為止,我所做的只是為每個文件編譯一個包含所有單獨路徑的文本文件。
一些範例路徑名:
/home/jennie/Pictures/DCIM/101APPLE/IMG_1703.JPG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1431.PNG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1933.JPG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1388.JPG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1954.JPG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1524.JPG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1897.PNG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1582.PNG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1007.PNG/5003.JPG /home/jennie/Pictures/DCIM/101APPLE/IMG_1502.JPG/5003.JPG
#!/bin/bash appledir="$HOME/Pictures/DCIM/101APPLE" jpgname="5003.JPG" for dir in "$appledir"/* do if [[ -d "$dir" ]] then newfile="$appledir/${dir##*/}" mv "$dir"/5003.JPG "$newfile.tmp" && rmdir "$dir" && mv "$newfile.tmp" "$newfile" fi done
初始樹是這樣的:
$ tree Pictures/ Pictures/ └── DCIM └── 101APPLE ├── IMG_1002.JPG │ └── 5003.JPG ├── IMG_1003.JPG │ └── 5003.JPG └── IMG_1004.JPG └── 5003.JPG
執行腳本 (
./script.sh
) 後,這將是樹:$ tree Pictures/ Pictures/ └── DCIM └── 101APPLE ├── IMG_1002.JPG ├── IMG_1003.JPG └── IMG_1004.JPG
編輯:
要將
*.PNG
文件重命名為*.JPG
,請使用:for name in "$HOME/Pictures/DCIM/101APPLE"/*.PNG do mv -i "$name" "${name%PNG}JPG" done
由於您可以靈活選擇最終文件名,並且這些照片來自現代智能手機,因此我建議
exiftool
您自動組織和重命名照片:
- 首先,製作一個副本/備份您的
~/Pictures/iPhone
,以便您在需要時總有一些可以依靠的東西exiftool
使用以下選項在命令提示符下執行:$ exiftool -P -r '-FileName<DateTimeOriginal' -d ~/outdir/%Y-%m-%d/%H/%Y-%m-%d_%H.%M.%S.%%e ~/Pictures/iPhone
~/Pictures/iPhone
這應該根據 iPhone 自動嵌入到每張照片中的 EXIF 時間戳數據,將您的 、重新組織和重命名它們清空到新生成的~/outdir
目錄中。生成的目錄路徑和圖像文件名將如下所示:~/outdir/2016-01-03/10/2016-01-03_10.38.58.jpg
安裝
如果你沒有
exiftool
,你可以安裝$ sudo apt-get install libimage-exiftool-perl
選項
'-FileName<DateTimeOriginal'
是字面的,是論點的一部分-d
指定目標模板,例如您可以更改為~/outdir
您選擇的另一個路徑- 目前,該
%H/
部分是在每個日期目錄中進一步創建每小時子目錄的部分。如果您不希望有這樣的每小時子目錄,您可以省略小時部分,如下所示:~/outdir/%Y-%m-%d/%Y-%m-%d_%H.%M.%S.%%e
- 或者如果您甚至不想要每個日期目錄,只想要直接在中的圖像
~/outdir
,您可以省略日期目錄部分並執行以下操作:~/outdir/%Y-%m-%d_%H.%M.%S.%%e