如何递归根据上级两级文件夹名重命名指定文件?
递归查找并重命名文件的实现方案
可以通过find命令结合bash子shell实现需求,核心思路是对每个找到的file.txt,提取其所在目录及上级目录的名称,再构造新文件名完成重命名。
具体命令
find . -name "file.txt" -type f -exec bash -c ' file="$1" dir=$(dirname "$file") parent_dir=$(dirname "$dir") part1=$(basename "$parent_dir") part2=$(basename "$dir") new_name="$dir/$part1.$part2.txt" mv "$file" "$new_name" ' bash {} \;
命令解释
find . -name "file.txt" -type f:从当前目录开始,递归查找所有名为file.txt的普通文件-exec bash -c '...' bash {} \;:为每个找到的文件启动bash子shell执行处理逻辑,{}会被替换为当前找到的文件路径dir=$(dirname "$file"):获取目标文件所在的目录路径(例如./A/B/C/D/file.txt对应./A/B/C/D)parent_dir=$(dirname "$dir"):获取该目录的上级目录路径(对应./A/B/C)part1=$(basename "$parent_dir"):提取上级目录的名称(对应C)part2=$(basename "$dir"):提取当前目录的名称(对应D)new_name="$dir/$part1.$part2.txt":拼接得到新的文件路径(对应./A/B/C/D/C.D.txt)mv "$file" "$new_name":执行重命名操作
可选优化
如果担心重命名时覆盖已存在的文件,可以给mv命令加上-n参数,避免强制覆盖:
mv -n "$file" "$new_name"
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

