批处理文件重命名:比随机 id 更好的方法来防止删除具有重复文件名的文件?

Kat*_*ger 5 bash date rename random

我想重命名一组过去假期的照片,这些照片由不同的人使用不同的设备(手机、相机等)从不同的角度拍摄。我只是写了一个小 bash 脚本来帮助我:

#!/bin/bash
for f in *; do
  # generate random id to prevent deletion of files with duplicate names 
  randomid=$(tr -dc "[:alnum:]" < /dev/urandom | head -c 10)
  # add modification date and time including seconds to the filename, attach location and random id 
  mv -- "$f" "$(date +%Y-%m-%d-%R:%S -r "${f}")_location_${randomid}.jpg";
done
Run Code Online (Sandbox Code Playgroud)

结果是名称如下所示的文件:2016-08-09-15:56:24_location_uPe38A20tn.jpg

我不得不添加随机 ID,因为有照片是在同一日期和第二个时间拍摄的,因此文件最终具有重复的文件名并在此过程中被删除。

您是否看到另一种确保在同一日期同一秒拍摄的照片不会被删除的另一种方法 - 除了我使用随机 ID 的想法?

谢谢你的帮助!

小智 2

这将给出重复的数字 1、2、3 等。

dest=$(date +%Y-%m-%d-%R:%S -r "${f}")_location_
id=
while [ -f "$dest""$id".jpg ] ; do
    ((id++))
done
dest="$dest""$id".jpg
mv -- "$f" "$dest"
Run Code Online (Sandbox Code Playgroud)

它应该放在for f in *循环内。