Bash
如何使用終端將具有連續名稱的文件重命名為另一個序列?
我有一個目錄,其中包含名為“o1.ray”到“o293.ray”的文件。我想將它們移動到另一個目錄,同時將它們重命名為“o132.ray”為“o424.ray”。
我怎樣才能在終端中做到這一點?
cd directory for i in {1...293}; do cp o$i.ray subdirectory/o$i+131.ray; done
我知道這是錯誤的,因為我得到:
error message 'cp: cannot stat 'o{1...293}.ray': No such file or directory
正如 Kusalananda 所暗示的,這主要是對語法的調整:
for index in {1..293}; do echo mv o"${index}".ray subdirectory/o"$((index+131))".ray; done
echo
當輸出看起來正確時刪除。或者,使用 zsh 的zmv 模組:
autoload zmv zmv -n 'o(<->).ray' 'subdirectory/o$[$1 + 131].ray'
$[ ... ]
語法執行算術;$1
被擷取在 . 後面的括號<->
中o
。這<->
是一個 zsh 萬用字元,用於擷取數字範圍;沒有任何端點,它是開放式的;對於您的情況,您可以非常具體:zmv -n 'o(<1-293>).ray' 'subdirectory/o$[$1 + 131].ray'
-n
當輸出看起來正確時刪除。