重命名多个子目录,以父目录的名称为前缀

Renaming multiple subdirectories with the name of parent directory as prefix

提问人:Nayab Qureshi 提问时间:6/30/2023 最后编辑:BarmarNayab Qureshi 更新时间:6/30/2023 访问量:36

问:

我有多个目录 1111、2222、3333、4444,每个目录内都有名为 _apple 的子目录。我想将父文件夹名称作为前缀添加到子目录中。

我所拥有的是

1111
 _apple

2222
 _apple

3333
 _apple

我想要的是

1111
 1111_apple

2222
 2222_apple

3333
 3333_apple

请问是否有人可以帮忙?

我试过了,但它仅适用于第一个文件并且不迭代。我有 100 多个目录,它仅适用于第一个目录。

for folder in */; do 
    
    for sample_num in */; do
        cd $sample_num
        sample="${sample_num::-1}"
        for rename in _apple; do
            mv -- "$rename" "{$sample}_{$rename}"
        done
        cd ..
        cd ..
    done
python bash shell 文件重命名 前缀运算符

评论

0赞 Barmar 6/30/2023
代码中缺少 a。done
0赞 Barmar 6/30/2023
、 等 目录中是否也有不应重命名的文件?11112222
0赞 Barmar 6/30/2023
有没有遗漏?如果没有,并且正在循环相同的文件夹。cd "$folder"foldersample_num
0赞 user1934428 7/4/2023
${sample_num::-1}表示没有最后一个字符。这真的是你想要的吗?sample_num

答:

0赞 Barmar 6/30/2023 #1

您不需要所有命令。在目录和子目录部分都使用通配符。然后用参数扩展运算符拆分它,以获取父名和子名。cd

for subdir in */*; do
    if [ -d "$subdir" ]
    then
        dirname=${subdir%/*}
        subdirname=${subdir#*/}
        mv "$subdir" "$dirname/$dirname$subdirname"
    fi
done

评论

0赞 Nayab Qureshi 6/30/2023
成功了!多谢!
0赞 Nayab Qureshi 6/30/2023
另外,您之前问题的答案是,是的,每个父目录(即 1111、2222、333)中还有其他文件,但它们是不同的文件而不是目录。非常感谢!最后,我可以继续:)
0赞 Barmar 6/30/2023
这就是目的。if [ -d
0赞 Nayab Qureshi 6/30/2023
著名的!谢谢!
0赞 911 6/30/2023 #2

看到您在问题中添加了 python 标签。这是 python 的解决方法

from pathlib import Path

root = "The/directory/where/1111,2222,3333/are/located"
for i in Path(root).iterdir():
    for j in i.glob("*_apple"):
        j.rename(i / f"{i.name}{j.name}")