폴더의 파일 이름에서 일부 텍스트를 제거하려면 어떻게해야합니까?
현재 시도하고 있습니다 :
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*
식의 정밀도가 필요하지는 않지만 파일을 수정할 때 너무주의 할 수는 없습니다.