【问题标题】:Bash to rename files to append folder nameBash 重命名文件以附加文件夹名称
【发布时间】:2020-08-29 00:27:54
【问题描述】:

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

例子:

/桌面/Trip 1/200512 1.jpg

/桌面/Trip 1/200512 2.jpg

会变成:

/桌面/Trip 1/Trip 1 200512 1.jpg

/桌面/Trip 1/Trip 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

【问题讨论】:

标签: bash macos rename finder


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,这对在当前文件夹中的 rname 有效。有没有办法让它也适用于子文件夹?我想我需要 -R 或 -regex 标志,对吧?但是我会把它放在哪里呢?
    猜你喜欢
    • 2021-12-19
    • 2012-03-25
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 2016-01-25
    • 2017-12-12
    • 2018-09-06
    相关资源
    最近更新 更多