디렉토리에서 파일 이름 바꾸기


10

다음 파일과 같은 디렉토리의 파일 이름을 바꾸는 방법 : PMC21375.pdf.txt, 로 이름을 바꿔야합니다 21375.txt. 즉, 각 파일 이름 PMCpdf파일 이름을 모두 제거해야합니다 .

답변:


9

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이 작성했습니다.


.pdf파일 이름에서를 제거하지는 않습니다 .
William Everett

그에 따라 게시물이 수정되었습니다.
Gilles Quenot

5

rename 명령 외에도 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

.pdf파일 이름에서를 제거하지는 않습니다 .
윌리엄 에버렛

당신은 그것을 시도 했습니까? 나 때문에 그래요 편집에 표시됩니다.
hmontoliu

내 잘못이야. 대문자로 변환한다고 생각했습니다. 공감.
William Everett

4

파일 이름 바꾸기를위한 여러 유틸리티가 있지만 사용하기 가장 쉬운 방법 중 하나는 rename입니다. 귀하의 경우 다음을 수행 할 수 있습니다.

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

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

renameLinux를 실행중인 경우 이미 존재해야합니다. * BSD 또는 OS X를 실행중인 경우 먼저 설치해야합니다.


나는 GNU가 없다 rename. 하나있다 util-linux, 그리고 하나 perl다른 구문. 당신이 util-linux말하는 rename.ul것은 renamefrom 과 혼동하지 않기 위해 때때로 호출 되는 것처럼 보이지만 perl, 다른 시스템에서는 renameutil-linux의 것이고 다른 하나는 from perl입니다 prename.
Stéphane Chazelas

1
내 것은 util-linux의 것입니다. 실수로 GNU coreutils의 일부라고 생각했습니다.
wingedsubmariner

이름 바꾸기의 기본 데비안 버전은 다음과 같이 될 것입니다 rename 's/PMC// *.txtrename s/\.pdf// *.txt
윌리엄 에버렛

1

먼저 파일을 백업하십시오! 그런 다음 기본적으로 현재 디렉토리에서 파이썬 한 줄짜리를 일반적인 형식으로 사용할 수 있습니다.

python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"

특정 경우에는 이것을 두 번 사용할 수 있습니다.

python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"

제거 .pdf하고 다시 :

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

제거 PMC합니다.


0

이 시도:

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

j=${i//\.pdf/}수단을 대체 할 수 .pdf있는 $i아무것도. 마찬가지로 두 번째 j 과제도 PMC를 제거합니다.


0

를 사용하는 경우 zsh일반적인 작업입니다 zmv.

zmv 'PMC(*).pdf.txt' '$1.txt'

( zmv정상적으로 잠재적 인 충돌을 처리합니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.