Command-Line
基於父目錄的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/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
等等指的是模式中相應的括號組。有關其他可能性和限制,請參閱手冊。