提问人:Nayab Qureshi 提问时间:6/30/2023 最后编辑:BarmarNayab Qureshi 更新时间:6/30/2023 访问量:36
重命名多个子目录,以父目录的名称为前缀
Renaming multiple subdirectories with the name of parent directory as prefix
问:
我有多个目录 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
答:
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}")
评论
done
1111
2222
cd "$folder"
folder
sample_num
${sample_num::-1}
表示没有最后一个字符。这真的是你想要的吗?sample_num