Linux

重命名包含不同數字的多個文件

  • September 4, 2021

我有多個具有以下格式的文件:(請注意,文件對應於每個不常見的文件名)。

File1_S20.tab
File2_S25.tab
File3_S40.tab
etc.

我想重命名它們,使它們成為:

File1
File2
File3
etc.

基本上_S$$.tab從所有文件中刪除部分。

對於重命名文件,我通常使用如下重命名命令:(rename # somethingelse *.tab替換#somethingelse)。

但我唯一的麻煩是每個文件在S.

這聽起來像你有 util-linux 版本rename,它不容易彎曲。還有一個基於 Perl 的工具,稱為rename. (參見:‘rename’ 和 ‘mv’ 有什麼區別?

使用 Perl 重命名,如果你能得到它,那很容易(或添加-n以查看它會做什麼):

rename 's/_S\d+\.tab//' File*.tab

(在 Perl 中實現重命名循環相對簡單,但是正確且安全地完成它需要幾行程式碼。)

但是你可以在 shell 中使用一個循環來做到這一點:

for f in File*.tab; do
   mv -n -- "$f" "${f%%_S[0-9][0-9].tab}"
done

(或者"${f%%_S*.tab}"匹配任何東西來代替兩位數,或者shopt -s extglob在 Bash 中使用,然後"${f%%_S+([0-9]).tab}"匹配任意數量的數字。)

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