Bash

移動和重命名數百個 .jpg 文件,全部命名為 5003.jpg

  • January 16, 2016

所以這就是交易,我的女朋友希望我將她所有的照片從她的 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您自動組織和重命名照片:

  1. 首先,製作一個副本/備份您的~/Pictures/iPhone,以便您在需要時總有一些可以依靠的東西
  2. 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

引用自:https://unix.stackexchange.com/questions/255668