폴더에서 파일 이름 바꾸기 이름에서 일부 텍스트를 제거하려면 어떻게해야합니까? 현재 시도하고 있습니다

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

현재 시도하고 있습니다 :

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

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

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

파일 이름 예 :

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



답변

다음을 시도하십시오 :

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 사이의 일치 그룹을 유지했습니다 .

답변

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

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

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


답변