Bash

通過將中間字元串移動到文件名末尾來重命名文件

  • February 11, 2022

我有一些數據文件,我希望為我的管道重命名它們。

文件如下所示:

{unique_ids}_{experiment_condition}_L{3_digit_number}.txt

我需要重命名它們,以便實驗條件標誌將出現在文件名的末尾,在副檔名之前,如下所示:

{unique_ids}_L{3_digit_number}_{experiment_condition}.txt

unique_ids 和experiment_condition 的長度不固定。

例子:

ghad312fd2_Mb_L002.txt變成ghad312fd2_L002_Mb.txt.

謝謝你!

使用基於 Perl 的rename實用程序重命名目前目錄中與模式匹配的./*_*_*.txt所有文件(即名稱包含至少兩個下劃線並以 結尾的任何文件.txt):

rename -n 's/([^_]+)_([^_]+)\.txt$/$2_$1.txt/' ./*_*_*.txt

這將交換文件名的最後兩個下劃線分隔的部分,不包括文件名後綴.txt-n在確保它似乎在做正確的事情之後,刪除它以真正執行它。

使用zsh外殼:

autoload zmv
zmv  -n '(*)(_*)(_L[0-9](#c3))(.txt)' '$1$3$2$4'

(如果滿意,請刪除-n(試執行))。

[0-9](#c3)匹配 3 個 ASCII 十進制數字的序列。您還可以使用<0-999>匹配從 0 到 999 的數字(記住它也將匹配 0000123)或<->任何數字(一個或多個 ASCII 十進制數字的任何序列)。

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