我有一個目錄,里面裝滿了.mp4檔案,還有另一個目錄subdir。subdir我知道我可以通過運行以下命令將所有這些檔案移入:
mv ./*.mp4 ./subdir/
但是如果我想改變這些檔案的擴展名而不是移動呢?我希望存在這樣的語法:
mv ./(*).mp4 "./@1.webm"
在這里,括號確實捕獲了匹配的字串,并將@1被該字串替換。
當然,我只是編了這樣的語法,那個命令是行不通的。
所以,這里有一個問題:如何重用匹配的模式?如果沒有類似的語法,我應該使用這個任務的什么解決方案?在你建議之前:我確實知道一個,通過使用回圈for f in ./*.mp4 ; do mv "$f" "${f/.mp4/.webm}" ; done,但我希望看到比那個更緊湊的解決方案。
我不太確定模式匹配在 shell 中是如何作業的,所以我懷疑是否有比for上面提到的回圈更簡單的解決方案。
uj5u.com熱心網友回復:
zsh讓您縮短回圈。
# Compare to
# for f in ./*.mp4 ; do mv "$f" "${f/.mp4/.webm}" ; done
for f (./*.mp4) mv "$f" "$f:r.webm"
它還提供了zmv命令(以@glennjackman 的答案中的 Perl 腳本為模型)。
autoload zmv
zmv './(*).mp4' './$1.webm'
uj5u.com熱心網友回復:
使用 perlrename
rename -n 's{(. )\.mp4}{./subdir/$1.webm}' *.mp4
如果看起來正確,請洗掉-n標志
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/477869.html
上一篇:標志板,如通過css設計的按鈕
