Bash
在bash中重命名文件時重新排序文件名中的子字元串?
我有數百個文件,所有文件的名稱都遵循相同的模板:
results_20210503_input003_run017_cluster003.txt
他們在 bash 中重新排序子字元串的有效方式是什麼?
results_input003_cluster003_run017_20210503.txt
我正在考慮使用
cut -f$i
來獲取每個欄位,然後使用mv
來重命名文件,但這看起來很笨重。
使用 perl 重命名工具(取決於您的作業系統,可能稱為
rename
orperl-rename
或prename
):rename 's/(results)(_[0-9]{8})(.*)(\.txt)/$1$3$2$4/' results*txt
使用
-n
- 標誌進行試執行,向您顯示重命名。這個怎麼運作:
s/A/B/
- 在文件名中用模式 B 替換模式 A- 括號中的模式在出現時被賦予一個索引號
- 組是: 1)
results
:字面上的“結果”;2)_[0-9]{8}
: 下劃線後跟 0 到 9 的 8 位數字;3).*
.=任意字元,*=盡可能重複上一個條目,即一系列任意字元;4)\.txt
字面意思是“.txt”,.
需要轉義,否則將是(3)中的“任何字元”- 根據需要重新排序模式組,參考
$<ID>