我的音频文件名称为“A_B.wav”或“A.wav”。我想将文件名格式为“A.wav”的所有文件重命名为“A_A.wav”,并保留所有其他文件不变。
换句话说,我只需要批量重命名不包含下划线的文件。
有没有办法通过 Linux 控制台执行此操作?
#!/bin/bash
for i in *;
do
j=`echo $i | cut -d . -f 1`;
e=`echo $i | cut -d . -f 2`;
if [[ $j != *_* ]]
then
j=$j"_"$j"."$e;
mv $i $j;
fi
done
您可以将 python 与标准库一起使用:
from pathlib import Path
from os import walk
Path
类将处理文件父目录、扩展名。
walk
可用于遍历路径树。
假设我们有目录:
$ tree
.
├── dir_1
│ ├── A_1.wav
│ └── B_2.wav
├── dir_2
│ ├── C.wav
│ └── D_3.wav
├── E.wav
└── F_4.wav
以下 bash python 代码可以解决这个问题:
from pathlib import Path
from os import walk
list(map( lambda p: p.stem.find("_") < 0 and p.rename(p.parent/(p.stem + "_A" + p.suffix)), sum( ( [ Path(r)/x for x in fs ] for r, _, fs in walk(".", topdown=False)), [] )) )
您可以直接在 bash 中执行此代码:
python3 -c 'from pathlib import Path; from os import walk; list(map( lambda p: p.stem.find("_") < 0 and p.rename(p.parent/(p.stem + "_A" + p.suffix)), sum( ( [ Path(r)/x for x in fs ] for r, _, fs in walk(".", topdown=False)), [] )) )'
现在文件夹看起来像:
$ tree
.
├── dir_1
│ ├── A_1.wav
│ └── B_2.wav
├── dir_2
│ ├── C_A.wav
│ └── D_3.wav
├── E_A.wav
└── F_4.wav