批量重命名不包含字符的文件

问题描述 投票:0回答:2

我的音频文件名称为“A_B.wav”或“A.wav”。我想将文件名格式为“A.wav”的所有文件重命名为“A_A.wav”,并保留所有其他文件不变。

换句话说,我只需要批量重命名不包含下划线的文件。

有没有办法通过 Linux 控制台执行此操作?

console
2个回答
0
投票
#!/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

0
投票

您可以将 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
© www.soinside.com 2019 - 2024. All rights reserved.