macOS 터미널에서 파일 이름을 일괄 변경하는 방법?
이름이 다음과 같은 일련의 파일이 있는 폴더가 있습니다.
prefix_1234_567.png
prefix_abcd_efg.png
하나의 밑줄과 중간 내용을 일괄적으로 제거하여 출력을 다음과 같이 하고 싶습니다.
prefix_567.png
prefix_efg.png
관련이 있지만 완전히 설명할 수 있는 것은 아닙니다.
특정한 경우 다음을 사용할 수 있습니다.bash명령(bashmacOS의 기본 셸):
for f in *.png; do echo mv "$f" "${f/_*_/_}"; done
참고: 파일 이름이 다음으로 시작할 가능성이 있는 경우-,장소--그들 앞에서[1]:
mv -- "$f" "${f/_*_/_}"
참고:echo의 앞글자가 붙입니다.mv시운전을 하기 위해서입니다.실제 이름을 변경하려면 이 이름을 제거합니다.
명령줄에서 실행하거나 스크립트에서 사용할 수 있습니다.
"${f/_*_/_}"의 응용 프로그램입니다.bash매개 변수 확장: (첫 번째) 하위 문자열 일치 패턴_*_리터럴로 대체됨_이름에서 중간 토큰을 효과적으로 잘라냅니다.- 참고:
_*_패턴(글로브에도 사용되는 와일드카드 표현식)입니다. 정규 표현식이 아닙니다(패턴에 대해 알아보기 위해).man bash를 검색합니다.Pattern Matching).
배치 이름을 자주 변경하는 경우 Perl 기반 유틸리티와 같은 특수 도구를 설치하는 것이 좋습니다.macOS에서는 다음과 같이 널리 사용되는 패키지 관리자 Homebrew를 사용하여 설치할 수 있습니다.
brew install rename
다음은 다음을 사용하여 맨 위에 있는 명령에 해당하는 내용입니다.rename:
rename -n -e 's/_.*_/_/' *.png
다시, 이 명령은 모의 실행을 수행합니다. 제거-n실제 이름 변경을 수행합니다.
- 와 유사합니다.
bash솔루션,s/.../.../텍스트 대체를 수행하지만 - 에서와는 다릅니다.bash참 정규식이 사용됩니다.
특별한 논쟁의 목적.--대부분의 유틸리티에서 지원되는 것은 다음 인수가 다음으로 시작하여 옵션처럼 보이더라도 피연산자(값)로 처리되어야 함을 알리는 것입니다.-제이콥 C.가 지적한 바와 같이
파일 이름을 변경하려면 다음을 사용할 수 있습니다.rename유틸리티:
brew install rename
예를 들어, 현재 디렉터리의 모든 파일 이름에서 검색 문자열을 변경하려면 다음과 같이 하십시오.
rename -nvs searchword replaceword *
변경 사항을 적용하려면 'n' 매개 변수를 제거합니다.
추가 정보:man rename
sed를 사용할 수 있습니다.
ls * | sed -e 'p;s@_.*_@_@g' | xargs -n2 mv
결과:
prefix_567.png prefix_efg.png
*먼저 모의 실행을 수행하려면, 교체합니다.mv마지막에echo
설명:
- e: 1개의 sed 명령에 대해서만 선택 가능합니다.
- p: 입력을 sed로 인쇄합니다. 이 경우 이름을 바꾸기 전에 원래 파일 이름이 됩니다.
- 보다 읽기 쉽게 하기 위해 / 문자를 대체한 것입니다.즉, seds/search/replace/g를 사용하는 대신 s@search@replace@g를 사용합니다.
- _.* : 밑줄은 실제 '.' 문자를 0회 이상 참조하는 이스케이프 문자입니다(정규식의 모든 문자와 대조적으로).
- -n2: mv에 파라미터로 전달해야 하는 출력이 2개 있음을 나타냅니다.ls로부터의 각 입력에 대해, 이 sed 명령은 2개의 출력을 생성하고, 이 출력은 mv에 공급됩니다.
be90-01.png과 같은 파일 배치가 있었고 대시를 밑줄로 변경해야 했습니다.저는 이것을 사용했는데, 잘 작동했습니다.
for f in *; do mv "$f" "`echo $f | tr '-' '_'`"; done
를 설치할 수 .rename사하여명을 사용하여 합니다.brew 해요.brew install rename그리고 그것을 사용합니다.
이것을 먹어보세요.
for i in *.png ; do mv "$i" "${i/remove_me*.png/.png}" ; done
다른 방법은 다음과 같습니다.
for file in Name*.png; do mv "$file" "01_$file"; done
용사를 합니다.mmv
mmv '*_*_*' '#1_#3' *.png
프로그래밍 방식으로 파일 이름을 바꾸는 것은 위험하기 때문에(잘못하면 손상될 수 있음) 대량 이름 변경을 위해 특별히 제작된 모의 실행 모드가 있는 도구(예: 이름 바꾸기)를 사용합니다.
디렉터리에 하며, " " " 를 사용합니다.--dry-run출력이 정확하게 보일 때까지:
$ renamer --find "/(prefix_)(\w+_)(\w+)/" --replace "$1$3" -e name --dry-run *
Dry run
✔︎ prefix_1234_567.png → prefix_567.png
✔︎ prefix_abcd_efg.png → prefix_efg.png
Rename complete: 2 of 2 files renamed.
여기에 더 많은 이름 변경 사용 사례가 있습니다.
언급URL : https://stackoverflow.com/questions/24102974/how-to-batch-rename-files-in-a-macos-terminal
'programing' 카테고리의 다른 글
| .Net 대 SSIS:SSIS는 무엇에 사용되어야 합니까? (0) | 2023.06.27 |
|---|---|
| 오류 TS2345: 'T' 유형의 인수를 'object' 유형의 매개 변수에 할당할 수 없습니다. (0) | 2023.06.27 |
| 스토리지에 대한 일부 매개 변수를 확인할 수 없음: (?) (0) | 2023.06.27 |
| MVC 4 또는 5를 사용하는 MEF - Pluggable Architecture(2014) (0) | 2023.06.27 |
| 시스템에서 GetActiveObject에 대한 정의를 찾을 수 없습니다.런타임.Interop Services.C# 원수 (0) | 2023.06.22 |