sed를 사용하여 여러 파일의 이름 바꾸기

sed를 사용하여 여러 파일의 이름 바꾸기

다음 파일 세트가 있습니다

top_axi_256_wrapper_05.02.01.14.00_sample06.tgz
top_axi_128_wrapper_05.02.01.14.00_sample06.tgz

05.02.01.14.00교체 부품을 사용하고 싶습니다 05_02_01_14_00. 따라서 최종 출력은 다음과 같이 이름이 바뀐 파일입니다.

top_axi_256_wrapper_05_02_01_14_00_sample06.tgz
top_axi_128_wrapper_05_02_01_14_00_sample06.tgz

내 디렉토리에는 다음 유형의 파일 이름이 포함될 수도 있습니다.

a72_a_0.0.0_0.00.04_ac_dc.tgz

여기에서 파일 이름을 다음으로 바꾸고 싶습니다.

a53_1c_256K_a_0_0_0_0_00_04_ac_dc.tgz

어떻게 해야 하나요?

답변1

기본적으로 마지막 점을 제외한 점을 밑줄로 바꾸고 싶습니다.

Bash의 매개변수 확장을 사용하면 이 작업을 수행할 수 있습니다.

for file in * ; do
    replace_all=${file//./_}
    newname=${replace_all%_*}.${replace_all##*_}
    mv "$file" "$newname"
done
  • //./_방법모든 점을 밑줄로 바꾸기
  • %_*방법마지막 밑줄 뒤의 모든 항목을 제거합니다.
  • ##*_방법마지막 밑줄 앞의 모든 항목을 제거합니다.

또는 확장자를 먼저 저장한 다음 제거하고 모든 점을 밑줄로 바꾼 다음 확장자를 다시 추가할 수 있습니다. 이것은 독자들에게 연습문제로 남겨둔다.

답변2

perl- 기반 유틸리티는 검색 및 바꾸기 연산자나 번역 연산자뿐만 아니라 rename모든 perl명령문을 사용하여 파일 이름을 바꿀 수 있습니다( 파일 이름을 바꾸려는 대로 설정했는지 확인하십시오 ).s///y//$_

에서 man rename:

"rename"은 첫 번째 인수에 지정된 규칙에 따라 제공된 파일 이름을 바꿉니다. perlexpr 매개변수는 $_파일 이름을 지정하는 Perl에서 최소한 일부 문자열을 수정할 것으로 예상되는 Perl 표현식입니다 . 주어진 파일 이름이 표현식에 의해 수정되지 않으면 이름이 바뀌지 않습니다. 명령줄에 파일 이름이 지정되지 않으면 표준 입력에서 파일 이름을 읽습니다.

예를 들어:

rename 'my($b,$e) = m/^(.*)\.([^.]+)$/; $b =~ s/\./_/g; $_="$b.$e"' files

그러면 파일 이름이 기본 이름($b)과 확장자($e)로 분할됩니다. $b 그런 다음 모든 마침표( .)를 밑줄로 바꿉니다. 마지막 $_으로 로 설정합니다 "$b.$e".

출력( -v자세한 옵션 포함):

$ touch top_axi_256_wrapper_05.02.01.14.00_sample06.tgz \
    top_axi_128_wrapper_05.02.01.14.00_sample06.tgz \
    a72_a_0.0.0_0.00.04_ac_dc.tgz

$ rename -v 'my($b,$e) = m/^(.*)\.([^.]+)$/; $b =~ s/\./_/g; $_="$b.$e"' *
a72_a_0.0.0_0.00.04_ac_dc.tgz renamed as a72_a_0_0_0_0_00_04_ac_dc.tgz
top_axi_128_wrapper_05.02.01.14.00_sample06.tgz renamed as top_axi_128_wrapper_05_02_01_14_00_sample06.tgz
top_axi_256_wrapper_05.02.01.14.00_sample06.tgz renamed as top_axi_256_wrapper_05_02_01_14_00_sample06.tgz

-n그건 그렇고, 당신의 진술을 테스트할 때 사용하십시오 rename. 더 많은 것 man rename:

-n,-노노

작업 없음: 이름을 바꿀 파일 이름을 인쇄하지만 이름을 바꾸지는 않습니다.

Perl은 rename대부분의 배포판(예: renameDebian의 패키지)에서 사용할 수 있습니다.https://metacpan.org/release/File-Rename

관련 정보