使用正则表达式重命名文件

使用正则表达式重命名文件

我在尝试使用以下方法更改多个文件名时遇到了一些问题改名命令。

我有一个主目录,里面还有许多其他目录,在此之后,所有内容都是.wav文件。

/录制/101/101-27022018-01:00:09-M00.wav

我想改变文件的‘小时’;

101-27022018-01:00:09-M00.wav

使用相同日期作为参考

101-27022018-01:00:09-M00.wav

我尝试过这样的事情:

rename 's/27022018-01/27022018-08/' *.wav -v -n

问题是,如果我想更改所有这些目录中的所有文件的名称,该怎么办?该怎么办?

答案1

如果我们有两级目录结构,并且第一级内没有文件:

$ tree /tmp/rec
/tmp/rec
├── 101
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
├── 102
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
└── 103
    ├── 101-27022018-01:00:09-M00.wav
    └── 101-27022018-01:00:09-M01.wav

$ rename -n 's/27022018-01/27022018-08/' /tmp/rec/*/*.wav

rename(/tmp/rec/101/101-27022018-01:00:09-M00.wav, /tmp/rec/101/101-27022018-08:00:09-M00.wav)
rename(/tmp/rec/101/101-27022018-01:00:09-M01.wav, /tmp/rec/101/101-27022018-08:00:09-M01.wav)
rename(/tmp/rec/102/101-27022018-01:00:09-M00.wav, /tmp/rec/102/101-27022018-08:00:09-M00.wav)
rename(/tmp/rec/102/101-27022018-01:00:09-M01.wav, /tmp/rec/102/101-27022018-08:00:09-M01.wav)
rename(/tmp/rec/103/101-27022018-01:00:09-M00.wav, /tmp/rec/103/101-27022018-08:00:09-M00.wav)
rename(/tmp/rec/103/101-27022018-01:00:09-M01.wav, /tmp/rec/103/101-27022018-08:00:09-M01.wav)

当目录结构更复杂时,我们可以使用 bash全球星选项:

$ tree /tmp/rec
/tmp/rec
├── 101
│   ├── 00
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 01
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
├── 102
│   ├── 00
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 01
│   │   └── 101-27022018-01:00:09-M00.wav
│   ├── 101-27022018-01:00:09-M00.wav
│   └── 101-27022018-01:00:09-M01.wav
└── 103
    ├── 00
    │   └── 101-27022018-01:00:09-M00.wav
    ├── 01
    │   └── 101-27022018-01:00:09-M00.wav
    ├── 101-27022018-01:00:09-M00.wav
    └── 101-27022018-01:00:09-M01.wav

9 directories, 12 files

$ shopt -s globstar
$ rename -v 's/27022018-01/27022018-08/' /tmp/rec/**/*.wav

/tmp/rec/101/00/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/00/101-27022018-08:00:09-M00.wav
/tmp/rec/101/01/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/01/101-27022018-08:00:09-M00.wav
/tmp/rec/101/101-27022018-01:00:09-M00.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M00.wav
/tmp/rec/101/101-27022018-01:00:09-M01.wav renamed as /tmp/rec/101/101-27022018-08:00:09-M01.wav
...

参考:

相关内容