首页 > 解决方案 > 从不同路径批量重命名多个文件

问题描述

我有一个文件目录music/artist/{random_name}/{random_music}.ogg

里面有很多文件夹{random_name}和不同类型的音乐标题{random_music}

所以,我想重命名{random_music}.oggmusic.ogg. 每个{random_name}文件夹只有一个 .ogg 文件。

我已经尝试了几个小时的 Bash 脚本,但没有找到答案。

for f in ../music/artist/*/*.ogg
do
  echo mv  "$f" "${f/.*.ogg/music.ogg}"
done

它只重命名我当前目录上的文件,这将要求替换/覆盖。

我的目标是,我想将所有{random_music}.ogg文件重命名为music.ogg它们各自的目录,例如,

music/artist/arai/blue.oggmusic/artist/arai/music.ogg

music/artist/sako/sky.oggmusic/artist/sako/music.ogg

标签: bashmacosbatch-rename

解决方案


您的模式替换不正确。因为您的所有路径都以..,.*.ogg实际上匹配整个路径,所以每个文件都被转换到music.ogg您的当前目录中。

你想要${f/\/*.ogg/music.ogg},或者更好的是,${f%/*}/music.ogg。这大致相当于"$(dirname "$f")"/music.ogg.


推荐阅读