폴더에서 파일 이름 바꾸기


10

폴더의 파일 이름에서 일부 텍스트를 제거하려면 어떻게해야합니까?

현재 시도하고 있습니다 :

rename s/"NEWER_(.*?)"//g *

하지만 이름이 바뀌지는 않습니다.

OneDrive에 "(NEWER_timestamp)"를 추가하는 것이 좋습니다.

파일 이름 예 :

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
예제 파일 이름을 게시 할 수 있습니까?
muru

확실한. 일부 업데이트 된 질문
Kevin

답변:


8

다음을 시도하십시오 :

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • 모두 [^/]*(.*) .*$는를 포함하지 않는 경로의 마지막 부분 만 일치합니다 /. 과
  • 위의 정규 표현식에서 (.*)마지막 /및 공백 이전의 모든 항목을 일치시키는 그룹입니다 . 역 참조는입니다 $1.
  • .*$$공백 후 파일 이름 끝에 모든 것을 일치 시킵니다.
  • 마지막으로 rename의 대체 부분에서 s/.../REPLACEMENT/last \(.*)match of group 사이의 일치 그룹을 유지했습니다 .

2

정규 표현식 밖에서 따옴표를 사용하는 것을 고려하고 (말 그대로 따옴표로 인용) 탈출해야 (합니다. 시험;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

식의 정밀도가 필요하지는 않지만 파일을 수정할 때 너무주의 할 수는 없습니다.


이 모든 일이 벌어지고 있습니다. reading filenames from STDIN이미 모든 파일이있는 상위 폴더 안에 있습니다.
Kevin

@Kevin "명령 줄에 파일 이름이 없으면 표준 입력을 통해 파일 이름을 읽습니다." *NEWER*확장이 발견되지 않으면 쉘이 그대로 남으므로 실수를했거나 일치하지 않는 와일드 카드를 대체하지 않은 쉘을 사용하고 있어야합니다.
muru December

복사하여 붙여 넣기, 우분투 14.10 쉘
Kevin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.