디렉토리에 있는 모든 파일의 파일 이름 하위 집합 이름을 바꾸는 방법은 무엇입니까?

디렉토리에 있는 모든 파일의 파일 이름 하위 집합 이름을 바꾸는 방법은 무엇입니까?

다음과 같은 파일이 있습니다.

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

대체되어야 합니다 ..., .gz데비안이 제공하지 않는 .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 쉘이기 때문입니다). 이 셸에서는 다음을 수행할 수 있습니다.

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

동등한 것으로.

관련 정보