방금 메모를 백업했어요개념, 노트 이름에 해시 코드를 사용하여 명백히 고유하게 만듭니다.
예를 들어 다음은 일부 주석이 포함된 주석 폴더일 수 있습니다.
Archive e74f698cb73b42c790d08999bdbe47e4
├── Note 1 cda63bef095a493f9847d516cf34fa5f.md
├── Note 2 dda63bef095a493f9847d516cf34fa5f.md
(때로는 .csv
양식 파일이기도 함)
패턴을 대체하기 위해 정규식을 사용하려고 하는데 [a-z0-9]{32}
작동하는 데 문제가 있습니다 s/
.
find -type f -print0 | xargs -0 rename 's/[a-z0-9]{32}//g'
-print0
( 그리고 의 목적이 무엇인지 잘 모르겠습니다 -0
.)
위의 코드는 파일에서만 작동하지만 비슷한 접근 방식을 사용해 보았지만 mv $f ${f:0:-34}
작동하지 못했습니다. s를 사용하지 않고 파일과 폴더를 한 줄로 바꾸는 방법이 있습니까 for
?
나는 StackOverflow에서 이 질문에 대한 다른 많은 답변을 시도했지만 지금까지 찾은 거의 모든 답변은 파일을 다루거나 고정 단어를 패턴으로 사용합니다.
Mass-Move 명령줄 도구( )를 사용하고 싶은데 mmv
Arch Linux용 공식 배포판이 없나요?
답변1
참고: 다음은 "파일에 적용"을 관찰한 대로 Perl 기반 명령 rename
을 사용하고 있다고 가정합니다.rename 's/[a-z0-9]{32}//g'
바라보다
디렉토리와 파일을 찾으려면 제한 사항을 제거해야 합니다 -type f
.
또한 파일을 포함하기 전에 디렉터리 이름이 바뀌는 것을 방지해야 합니다. GNU를 사용하면 깊이 우선 순회를 지정하여 find
이 작업을 수행할 수 있습니다 .-depth
rename
마지막으로 명령이 경로 구성 요소가 아닌 파일 기본 이름에서만 작동하는지 확인해야 합니다 . rename
구현에서는 이를 수행하는 옵션(예: -d
, --filename
, --nopath
) 을 제공할 수 있지만 작업을 통해 직접 호출 --nofullpath
할 수도 있습니다 .rename
find
-execdir
그래서
find . -depth -execdir rename -n 's/ [a-z0-9]{32}//' {} +
( -n
제안된 대안에 만족하면 제거하세요). g
파일당 패턴의 단일 인스턴스를 바꾸는 데 교체 플래그가 필요하지 않습니다 .
[a-z0-9]
로 대체하는 것을 고려해 볼 수도 있습니다 [[:xdigit:]]
.
또한보십시오: