Command-Line

基於父目錄的cp命令

  • February 6, 2021

我在父文件夾中有幾個文件夾,它們都具有以下結構,並且正在努力創建一個特定的循環。

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

我仍然是初學者並且對此非常陌生,因此將不勝感激。非常感謝。

您可以嘗試以下 for 循環,

for d in parentfolder/* ; do
   cp "$d/subfolder/map.png" "$d.png"
done

您應該在目前目錄與parentfolder.

Zsh 附帶了一個實用程序,該實用程序zmv適用於基於模式的文件重命名和複製。.zshrc如果您還沒有它,請將其放入您的:

autoload -U zmv
alias zcp='zmv -C'
alias zln='zmv -L'

(或者在您的 shell 會話中執行這些命令,以便僅為該會話啟用它們。)

然後(從parentfolder):

zcp '(*)/subfolder/map.png' '$1.png'

第一個參數是要替換的模式。第二個參數是替換名稱。在替換中,$1$2等等指的是模式中相應的括號組。有關其他可能性和限制,請參閱手冊。

引用自:https://unix.stackexchange.com/questions/632898