Bash

將文件名的最後一個數字部分複製到開頭

  • June 3, 2020
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然後用預先縫合在一起。

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