Linux

如何修改多個文件名?

  • July 20, 2022

我在一個文件夾中有這些文件:

1658286488_2022_07_21_15.1.2-ee_gitlab_backup.tar 
1658546417_2022_07_22_15.1.2-ee_gitlab_backup.tar 
2258286417_2022_07_23_15.1.2-ee_gitlab_backup.tar

我想標準化他們的名字,這樣他們就可以看起來像這樣:

2022-07-21_15.1.2-ee_gitlab_backup.tar
2022-07-22_15.1.2-ee_gitlab_backup.tar
2022-07-23_15.1.2-ee_gitlab_backup.tar

我正在尋找一個簡單的命令,例如 mv、rename 或類似的命令,因為我不太喜歡為此使用複雜的 bash 腳本。

由於您已經嘗試過 using rename,這裡有一個解決方案,使用rename(Perl 版本的實用程序,它是p5-File-Rename某些系統上的軟體包的一部分):

rename -n -v -d 's/.*?_// && s/_/-/ && s/_/-/' *-ee_gitlab_backup.tar

上面的命令使用了三個替換:

  1. 第一次替換會刪除_文件名中第一個字元之前的所有內容。Perl 正則表達式.*?_將匹配從文件名開始到第一個下劃線的任何內容。
  2. 第二次替換_將修改後的文件名中的第一個字元更改為-.
  3. 第三次替換是第二次替換的重複,這意味著下一個_字元也將被更改為-

該命令在使用選項呼叫時不會執行任何操作-n,因此如果您確定它會做正確的事情,請刪除它。

如果您為其他目錄中的文件提供完整路徑,該-d選項將確保僅重命名路徑的文件名部分。該-v選項啟用詳細操作。

如果您已經成功刪除了文件名的第一部分(如您的評論之一所示),則只需刪除第一個替換:

rename -n -v -d 's/_/-/ && s/_/-/' *-ee_gitlab_backup.tar

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