파일 이름의 초기 문자열 이름 바꾸기

파일 이름의 초기 문자열 이름 바꾸기

이름의 첫 번째 부분을 동적으로 제거하고 다른 곳에 복사해야 합니다. 내 파일 이름은 다음과 같습니다

Voice_XYZZ_1_1801.pdf
Voice_XYZZ_1_1801.ndx
Electon_MNOPQ_1_1801.pdf
Electon_MNOPQ_1_1801.ndx

런타임 시 음성이나 전자 장치 또는 둘 다 생성될 수 있습니다. 파일 이름에서 첫 부분을 제거해야 합니다. 다음과 같아야 합니다.

XYZZ_1_1801.pdf
XYZZ_1_1801.ndx
MNOPQ_1_1801.pdf
MNOPQ_1_1801.ndx

이를 달성하려면 어떤 명령을 사용할 수 있습니까?

답변1

fBourne 시리즈 쉘을 사용한다고 가정하면 다음 명령을 사용하여 파일 이름 변수에서 가장 짧은 선행 하위 문자열 일치(밑줄 포함)를 제거할 수 있습니다.${f#*_}

전임자.

$ touch Voice_XYZZ_1_1801.pdf Voice_XYZZ_1_1801.ndx Electon_MNOPQ_1_1801.pdf Electon_MNOPQ_1_1801.ndx

$ for f in Voice_* Electon_*; do echo "${f#*_}"; done
XYZZ_1_1801.ndx
XYZZ_1_1801.pdf
MNOPQ_1_1801.ndx
MNOPQ_1_1801.pdf

mv다음과 같이 파일 이름을 바꾸는 명령과 함께 사용할 수 있습니다 .

for f in Voice_* Electon_*; do mv "$f" "${f#*_}"; done

다음 명령을 사용하여 유사하게 다른 위치에 복사할 수 있습니다 cp.

for f in Voice_* Electon_*; do cp "$f" "newdir/${f#*_}"; done

답변2

이는 명령줄에서 Perl 코드 한 줄을 호출하여 쉽게 수행할 수 있습니다.

ls *_* | perl -ne 'chomp($_); $orig = $_; $_ =~ s/[^_]*_//; rename $orig,$_;'

다음은 코드에 대한 설명입니다.

  • 이름에 "_"가 포함된 모든 파일 이름을 다음 명령으로 보냅니다.

    엘에스_|

  • 전달된 각 문자열에 대해 다음 명령을 실행합니다.

    펄라이트

  • 파일 이름에서 개행 문자 제거("ls" 명령을 실행한 후 남은 내용)

    씹다($_);

  • 단어의 첫 부분을 삭제하고 "_"을 찾을 때까지 검색하세요.

    $_ =~ s/[^]*//;

  • 파일명 변경

    $orig,$_의 이름을 바꿉니다.

관련 정보