Linux

如何重命名目錄中所有文件的文件名子集?

  • February 28, 2022

有以下文件。

test.tar.gz.part00
test.tar.gz.part01
test.tar.gz.part02
…
test.tar.gz.part99

需要替換.gz為… 理想情況下不使用Debian 不附帶的.lz4依賴項(例如)。rename

感謝您的幫助!

你可以使用rename它。

rename gz lz4 ./*part*

沒有rename

for file in ./*part*; do mv "$file" "${file//gz/lz4}"; done

rename最初是 80 年代非常短perl的範例腳本。

它很短,您可以輕鬆地將其內聯到任何腳本中:

perl -e 'for (@ARGV) {
          $old = $_; rename $old, $_ if s/\.gz(\.part\d+)\Z/\.lz4$1/s
        }' -- *.gz.part*

此外perlbash是另一種語言解釋器,通常預設情況下在基於 Debian GNU/Linux 的系統上提供(因為那是 GNU shell)。在那個 shell 中,你可以這樣做:

shopt -s extglob nullglob
for file in *.gz.part+([0123456789]); do
 mv -T -- "$file" "${file%.*.*}.lz4.${file##*.}"
done

作為等價物。

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