Bash 重命名文件以附加文件夹名称

Bash to rename files to append folder name

在文件夹和子文件夹中,我有一堆按日期命名的图像。我正在尝试编写一个脚本来查看 folder/subfolders 并重命名所有 jpg 文件以添加文件夹名称。

示例:

/Desktop/Trip 1/200512 1.jpg

/Desktop/Trip 1/200512 2.jpg

会变成:

/Desktop/Trip 1/行程 1 200512 1.jpg

/Desktop/Trip 1/行程 1 200512 2.jpg

我试着调整这个脚本,但我不知道如何让它添加新的部分。我也不知道如何让它在子文件夹上工作。

#!/bin/bash
# Ignore case, i.e. process *.JPG and *.jpg
shopt -s nocaseglob
shopt -s nullglob

cd ~/Desktop/t/

# Get last part of directory name
here=$(pwd)
dir=${here/*\//}
i=1
for image in *.JPG 
do
   echo mv "$image" "${dir}${name}.jpg"
   ((i++))
done

在您的 for 循环中尝试以下操作。请注意,'' 用于脚本可以处理文件名中的空格。

for image in "$search_dir"*.JPG
do
    echo mv "'$image'" "'${dir} ${image}'"
done

使用 find-iname 选项进行不区分大小写的匹配和循环图像的小脚本:

find /Desktop -iname '*.jpg' -exec sh -c '
  for img; do
    parentdir=${img%/*}      # leave the parent dir (remove the last `/` and filename)
    dirname=${parentdir##*/} # leave the parent directory name (remove all parent paths `*/`)
    echo mv -i "$img" "$parentdir/$dirname ${img##*/}"
  done
' sh {} +

这会提取每个图像路径的父路径(如 dirname 命令)和目录名称(如 basename),并在图像之前使用父目录名称构造一个新的输出文件名文件名。

如果输出符合预期,请删除 echo