Bash

在bash中重命名文件時重新排序文件名中的子字元串?

  • May 4, 2021

我有數百個文件,所有文件的名稱都遵循相同的模板:

results_20210503_input003_run017_cluster003.txt

他們在 bash 中重新排序子字元串的有效方式是什麼?

results_input003_cluster003_run017_20210503.txt

我正在考慮使用cut -f$i來獲取每個欄位,然後使用mv來重命名文件,但這看起來很笨重。

使用 perl 重命名工具(取決於您的作業系統,可能稱為renameorperl-renameprename):

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>

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