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

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

有以下文件。

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

需要替换.gz为…,最好不要使用Debian 不附带的.lz4依赖项(例如)。rename

谢谢您的帮助!

答案1

你可以用rename它。

rename gz lz4 ./*part*

没有rename

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

答案2

rename最初是perl80 年代非常短的示例脚本。

它非常短,您可以轻松地将其内联到任何脚本中:

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

作为等价物。

相关内容