Linux
如何修改多個文件名?
我在一個文件夾中有這些文件:
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
上面的命令使用了三個替換:
- 第一次替換會刪除
_
文件名中第一個字元之前的所有內容。Perl 正則表達式.*?_
將匹配從文件名開始到第一個下劃線的任何內容。- 第二次替換
_
將修改後的文件名中的第一個字元更改為-
.- 第三次替換是第二次替換的重複,這意味著下一個
_
字元也將被更改為-
。該命令在使用選項呼叫時不會執行任何操作
-n
,因此如果您確定它會做正確的事情,請刪除它。如果您為其他目錄中的文件提供完整路徑,該
-d
選項將確保僅重命名路徑的文件名部分。該-v
選項啟用詳細操作。如果您已經成功刪除了文件名的第一部分(如您的評論之一所示),則只需刪除第一個替換:
rename -n -v -d 's/_/-/ && s/_/-/' *-ee_gitlab_backup.tar