基于父目录的 cp 命令

基于父目录的 cp 命令

我的父文件夹中有几个文件夹,它们都具有以下结构,并且正在努力创建特定的循环。

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/subfolderfolder01.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等引用模式中相应的括号组。有关其他可能性和限制,请参阅手册。

相关内容