bash - Bash 重命名文件以附加文件夹名称
问题描述
在文件夹和子文件夹中,我有一堆按日期命名的图像。我正在尝试编写一个脚本来查看文件夹/子文件夹并重命名所有 jpg 文件以添加文件夹名称。
例子:
/桌面/旅行 1/200512 1.jpg
/桌面/旅行 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
解决方案
使用不区分大小写的匹配选项和循环图像的小脚本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
如果输出看起来符合预期,请删除。
推荐阅读
- listview - 使用 ListView、DefaultTabController(以及 TabBar)和 RefreshIndicator
- reactjs - 如何为搜索结果创建自定义搜索页面?(react-native)
- html - 为什么我的视频没有垂直对齐(flexbox)?
- google-apps-script - 如何使用数组公式在所有列中应用自定义公式
- javascript - 使用 Ajax 未定义 abort 或 readyState
- node.js - 如何在 Node 中读取可读流的字节范围?
- flask - 从破折号调用异步函数
- c++ - 通过 UDP 的 AVAudioEngine 麦克风输入
- html - 在垂直中心对齐按钮并在 Bootstrap 中保持静止
- c++ - 以下函数的时间复杂度是多少?