ディレクトリ内のすべてのファイルのファイル名のサブセット名を変更するには?

ディレクトリ内のすべてのファイルのファイル名のサブセット名を変更するには?

次のファイルがあります。

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

置き換える必要があります...、.gzDebianが提供しない.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*

さらに、perl一般bash的にはDebian GNU / Linuxベースのシステムでデフォルトで提供されている別の言語ソルバーです(これがGNUシェルであるため)。このシェルでは、次のことができます。

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

等しいことで。

関連情報