Regex Bash,需要更改多个目录中的词序

Regex Bash,需要更改多个目录中的词序,regex,bash,directory,filenames,Regex,Bash,Directory,Filenames,我有相当多的经典FLAC收藏,其中每张专辑都是一个目录。我意识到我使用了次优结构,需要重命名所有目录 我目前的命名约定是: 作曲家(指挥家)-乐曲名称 例如 “巴赫(塞利比达切)-F小调弥撒” 我想把命名改为 作曲家-乐曲名称(指挥) 即 “巴赫——F小调弥撒(塞利比达切)” 有一些可能的例外,(指挥)可能是(指挥,独奏者),一些目录没有(指挥)部分,应该保持原样。工件名称可以包含所有法定字母和符号 所有相册都位于同一父目录中,因此没有子目录 做这件事的简单方法是什么?使用perl重命名(有些发

我有相当多的经典FLAC收藏,其中每张专辑都是一个目录。我意识到我使用了次优结构,需要重命名所有目录

我目前的命名约定是:

作曲家(指挥家)-乐曲名称

例如

“巴赫(塞利比达切)-F小调弥撒”

我想把命名改为

作曲家-乐曲名称(指挥)

“巴赫——F小调弥撒(塞利比达切)”

有一些可能的例外,(指挥)可能是(指挥,独奏者),一些目录没有(指挥)部分,应该保持原样。工件名称可以包含所有法定字母和符号

所有相册都位于同一父目录中,因此没有子目录


做这件事的简单方法是什么?

使用perl重命名(有些发行版将其命名为rename-Ubuntu和相关版本,有些发行版将其命名为prename-Fedora和Redhat-AFAIK)。先检查一下

prename -n -- '-d && s/(\(.*\)) - (.*)/- \2 \1/' *
  • -n
    不要重命名,只打印结果-在对结果满意后删除
  • --
    选项的结尾、perlexpr和文件的开头
  • -d
    检查文件是否为目录
  • s/../../
    -替换
例如:

[test01@localhost作曲家]$ls-la
总数12
drwxrwxr-x 3 test01 test01 4096 Feb 14 12:37。
drwxrwxr-x。7 test01 test01 4096二月14日12:23。。
drwxrwxr-x 2 test01 test01 4096年2月14日12:37“巴赫(塞利比达切)-F小调质量”
-rw-rw-r--1 test01 test01 0 Feb 14 12:27“巴赫(塞利比达切)-F小调质量。佛罗里达”
[test01@localhost作曲家]$prename-n--'-d&&s/(\(.*)-(.*)/-\2\1/'*
巴赫(塞利比达契)-F小调弥撒->巴赫-F小调弥撒(塞利比达契)
[test01@localhost作曲家]$prename--'-d&&s/(\(.*)-(.*)/-\2\1/'*
[test01@localhost作曲家]$ls-la
总数12
drwxrwxr-x 3 test01 test01 4096 Feb 14 12:38。
drwxrwxr-x。7 test01 test01 4096二月14日12:23。。
-rw-rw-r--1 test01 test01 0 Feb 14 12:27“巴赫(塞利比达切)-F小调质量。佛罗里达”
drwxrwxr-x 2 test01 test01 4096年2月14日12:37“巴赫-F小调质量(塞利比达切)”

请注意,如果没有
-d
,文件和目录都将被重命名

你在哪里?到目前为止你试过什么?