Bash
將文件名的最後一個數字部分複製到開頭
ISS45_20200302030042.zip R0387F200229.zip
我想要這個場景的 shell 腳本。以上是我想要的兩個文件名。我希望將數字部分添加到這兩個文件名的前面。請參閱下面的範例了解我想要的內容:
20200302030042_ISS45_20200302030042.zip 200229_R0387F200229.zip
for f in *.zip; do mv "$f" $(sed -E 's/^(.+)_([^.]+)\./\2_\1./' <<< "$f") done
我正在使用這個。它僅適用於
iss45
文件,但不適用於R
文件。
這是
sed
您需要的命令:sed -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/'
$ echo ISS45_20200302030042.zip | sed -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/' 20200302030042_ISS45_20200302030042.zip $ echo R0387F200229.zip | sed --posix -r 's/^(.*)([^[:digit:]])([[:digit:]]+)\.zip$/\3_\1\2\3.zip/' 200229_R0387F200229.zip
如果你有 Perl-ish 版本的 rename 可用(即使你沒有,正則表達式也應該使用
sed -r
.)rename 's/^(.*[^0-9]+)([0-9]+)([.]zip)$/$2_$1$2$3/' *.zip
從邏輯上將名稱分為三個部分,從右到左:副檔名
$3
、副檔名之前的數字塊$2
以及它之前的所有內容$1
。
$2
然後用預先縫合在一起。