Linux
重命名包含不同數字的多個文件
我有多個具有以下格式的文件:(請注意,文件對應於每個不常見的文件名)。
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}"
匹配任意數量的數字。)