Linux:根据父目录重命名多个图像并添加后缀(批量)

Linux:根据父目录重命名多个图像并添加后缀(批量)

我有一个图像目录,其中有更多子目录,其中包含带有随机文件名的图像。

images/black-shoe/gsafdfs.jpg
images/black-shoe/ggdfgdf.jpg
images/black-shoe/gdfgd3f.jpg
images/black-shoe/g4twegd.jpg

images/red-shoe/ggsdgdfs.jpg
images/red-shoe/gskjhkhf.jpg
images/red-shoe/gsakytfs.jpg

我想将所有图像批量重命名为它们的父目录,但为了防止一个图像覆盖另一个图像,请添加这样的后缀。

images/black-shoe/black-shoe-1.jpg
images/black-shoe/black-shoe-2.jpg
images/black-shoe/black-shoe-3.jpg
images/black-shoe/black-shoe-4.jpg

images/red-shoe/red-shoe-1.jpg
images/red-shoe/red-shoe-2.jpg
images/red-shoe/red-shoe-3.jpg

我使用 Debian 8,熟悉使用命令行。理想情况下,我希望有一个小脚本或一行程序,可以在 images/ 中执行,以便一次性将它们应用于所有子目录。

答案1

这个简短的脚本应该可以解决问题(文件和目录名称可能包含空格):(应该使用 basedir 作为参数来调用)

#!/bin/bash

basedir=$1

while IFS= read -r -d '' path; 
do 
  dirn=$(basename "$path")
  echo "===> $path"
  let i=1
  while IFS= read -r -d '' fname; 
  do
    fext=$(echo "$fname" | awk -F '.' '{print $NF}')
    mv "$fname" "${path}/${dirn}-${i}.${fext}"
    let i=i+1
  done < <(find "$path" -maxdepth 1 -type f -print0)
done < <(find "$basedir" -type d -print0)

相关内容