我的父文件夹中有几个文件夹,它们都具有以下结构,并且正在努力创建特定的循环。
parentfolder/folder01/subfolder/map.png
parentfolder/folder02/subfolder/map.png
parentfolder/folder03/subfolder/map.png
parentfolder/folder04/subfolder/map.png
ETC...
因此每个子文件夹都包含一个名为的文件map.png
(即所有子文件夹中的文件名相同,但它们是不同的文件)。
我想复制每个map.png
文件并将其放入整个父文件夹中,但同时我希望根据“子文件夹”上方的文件夹重命名副本。
例如,我想在重命名它的同时复制到父文件夹map.png
(然后使用循环对所有其他文件夹进行相应的操作)。parentfolder/folder01/subfolder
folder01.png
我已经尝试了一些类似的方法,但显然我正在努力让它做我想做的事:
for i in parentfolder/*; do
cd $i
cd subfolder
cp map.png ../../"$i".png
cd -
done
我仍然是一个初学者,对此非常陌生,因此将不胜感激任何帮助。非常感谢。
答案1
您可以尝试类似下面的 for 循环,
for d in parentfolder/* ; do
cp "$d/subfolder/map.png" "$d.png"
done
当当前目录与parentfolder
.
答案2
Zsh 附带一个实用程序zmv
这对于基于模式的文件重命名和复制很有用。.zshrc
如果您还没有,请将其放入您的:
autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'
(或者在 shell 会话中运行这些命令,以便仅针对此会话启用它们。)
然后(从parentfolder
):
zcp '(*)/subfolder/map.png' '$1.png'
第一个参数是要替换的模式。第二个参数是替换名称。在替换中,$1
、$2
等引用模式中相应的括号组。有关其他可能性和限制,请参阅手册。