디렉토리의 파일 이름 바꾸기

디렉토리의 파일 이름 바꾸기

다음 파일과 같은 디렉터리의 파일 이름을 어떻게 바꾸나요? PMC21375.pdf.txt, 로 이름을 바꿔야 합니다 21375.txt. 즉, 각 파일 이름에서 및 을 제거해야 합니다 PMC.pdf

답변1

그리고~의rename:

rename 's/(PMC|\.pdf)//g' *pdf.txt 

데모:

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

shell프롬프트 에서 . 매우 유용합니다. 일부를 넣을 수 있습니다.내가 교체한 코드와 같습니다. 테스트가 유효하면

제거할 수 있습니다(모의 실행 모드 스위치).-n

경고하다 이 작업을 수행할 수도 있고 수행하지 못할 수도 있는 같은 이름의 다른 도구가 있으므로 주의하세요.

다음 명령을 실행하면 ( linux)

$ file $(readlink -f $(type -p rename))

이런 결과가 나왔어요

.../rename: Perl script, ASCII text executable

그렇다면 이것이 올바른 도구인 것 같습니다 =)

그렇지 않은 경우 이를 기본값으로 설정하고(일반적으로 이미 적용되어 있음) Debian다음과 같이 파생시킵니다 Ubuntu.

$ sudo update-alternatives --set rename /path/to/rename

(명령어의 경로로 바꿉니다 /path/to/rename.perl's rename


마지막으로 이 도구는 원래 Perl의 아버지인 Larry Wall이 작성했습니다.

답변2

명령 이름을 바꾸는 대신 bash에서 직접 수행할 수 있습니다(여러 가지 방법 중 하나).

 for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done

Pinyaka에게 이것이 어떻게 작동하는지 보여주기 위해 편집하세요:

hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
   PCM21375.pdf.txt  PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
   21375.txt  21376.txt

답변3

파일 이름을 바꾸는 다양한 유틸리티가 있지만 가장 사용하기 쉬운 유틸리티 중 하나는 rename다음과 같습니다.

rename PMC '' *txt
rename .pdf '' *txt

첫 번째 매개변수는 대체될 파일 이름의 일부입니다. 두 번째 매개변수는 대체 문자열입니다. 여기서는 ''빈 문자열을 나타내는 데 이를 사용합니다 . 다음 매개변수는 이름을 바꿀 모든 파일입니다. 여기서는 *txt대체를 텍스트 파일로 제한하는 데 사용합니다.

renameLinux를 실행 중이라면 Linux가 이미 설치되어 있을 것입니다. *BSD 또는 OS X를 실행 중인 경우 먼저 설치해야 할 수도 있습니다.

답변4

이 시도:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

수단은 아무것도 대체되지 않습니다 j=${i//\.pdf/}. 마찬가지로 두 번째 j 할당도 PMC를 제거합니다..pdf$i

관련 정보