Bash 스크립트를 사용하여 여러 Linux 파일의 이름을 바꾸는 방법

Bash 스크립트를 사용하여 여러 Linux 파일의 이름을 바꾸는 방법

나는 가지고있다

123myfile123.jpg
123456myfile567.jpg

첫 번째 알파 문자 앞의 모든 것을 제거하고 싶습니다.

myfile123.jpg
myfile567.jpg

0-9를 모두 제거하는 것이 있습니다.

mv '123myfile123.jpg' $(echo '123myfile123.jpg' | sed -e 's/[0-9]//g')

myfile,jpg나에게 필요한 결과myfile123.jpg

이에 대한 도움을 주시면 대단히 감사하겠습니다.

답변1

이것은 단지 제안일 뿐입니다. 이 작업을 수행하는 더 효율적인 방법이 있을 수 있지만 이것이 도움이 되기를 바랍니다.

for i in $(find . -type f -name '*.jpg'); do mv -v $i $(echo $i | sed 's/\.\/[0-9]\+\(.*.jpg\)/\1/g'); done

명령에 대한 간단한 설명:

먼저 각 파일과 일치하는 find명령의 각 결과를 반복합니다..jpg

예제 출력:

./123myfile567.jpg
./123456myfile567.jpg

그런 다음 \.\/[0-9]\+\(.*.jpg\)정규식은 다음을 수행합니다.

  • ./처음부터 일치했어요 .
  • 나는 다음을 사용하여 하나 이상을 일치시킵니다 [0-9].+
  • 계속 사용하고 싶은 부분을 선택하고 ()나중에 불러요\1

[편집하다]

아직 하나 있어요도구호출 rename되며 정규식 사용을 기반으로 합니다. 나는 그것이 어떤 사람들에게 도움이되기를 바랍니다.

답변2

renameLarry Wall의 Perl 버전을 설치할 수 있습니다 .

Universe 저장소에서 Ubuntu에 설치할 수 있습니다. ( getpack이제 자체 쉘 스크립트이므로 원하는 경우 여기에 추가하거나 링크할 수 있습니다.) rename다른 Linux 배포판에도 설치할 수 있다고 생각합니다.

$ getpack rename
lrwxrwxrwx 1 root root 24 jan 10  2023 /usr/bin/rename -> /etc/alternatives/rename
lrwxrwxrwx 1 root root 20 jan 10  2023 /etc/alternatives/rename -> /usr/bin/file-rename
-rwxr-xr-x 1 root root 4529 okt 31  2021 /usr/bin/file-rename
-------------------------------------------------------------------
/usr/bin/file-rename: Perl script text executable
-------------------------------------------------------------------
 package: /path/program  [for command 'rename']
 rename: /usr/bin/file-rename 
-------------------------------------------------------------------
type: rename is /usr/bin/rename

$ apt-cache policy rename
rename:
  Installerad: 1.30-1
  Kandidat:    1.30-1
  Versionstabell:
 *** 1.30-1 500
        500 http://se.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
        500 http://se.archive.ubuntu.com/ubuntu jammy/universe i386 Packages
        100 /var/lib/dpkg/status

sudo apt install rename

그런 다음 옵션을 사용하여 "테스트 실행"을 확인할 수 있습니다.-n

$ rename -n 's/^[0-9]*//' *myfile*.jpg
rename(123456myfile567.jpg, myfile567.jpg)
rename(123myfile123.jpg, myfile123.jpg)

괜찮아 보이면 삭제 -n하고 실행하고 파일 이름을 바꾸세요.

rename 's/^[0-9]*//' *myfile*.jpg

대상 파일은 *myfile*.jpg아마도 실제 대상 파일을 기반으로 수정되어야 합니다 *.jpg.

관련 정보