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

sqserrrh  于 2023-06-30  发布在  Shell
关注(0)|答案(2)|浏览(124)

我有多个目录1111,2222,3333,4444,每个目录内的子目录命名为example _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
1rhkuytd

1rhkuytd1#

你不需要所有的cd命令。在目录和子目录部分使用通配符。然后使用参数展开运算符将其拆分以获得父名称和子名称。

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

dsekswqp2#

我看到你把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}")

相关问题