Program Club

터미널을 사용하여 파일 이름을 일괄 적으로 변경하려면 어떻게해야합니까?

proclub 2020. 12. 14. 20:09
반응형

터미널을 사용하여 파일 이름을 일괄 적으로 변경하려면 어떻게해야합니까?


나는 파일 세트를 가지고 있는데, 모두 nnn.MP4.mov어떻게 이름을 바꿀 수 nnn.mov있습니까?


먼저 다음을 사용하여 테스트 실행 (실제로 파일 이름을 변경하지 않음)을 수행합니다.

for file in *.mov
do
  echo mv "$file" "${file/MP4./}"
done

모든 것이 정상 echo이면 세 번째 줄에서를 제거하여 실제로 파일 이름을 바꿉니다.


저는 Automator를 성공적으로 사용했으며 (처음으로 고민했습니다) 정말 잘 작동합니다. 자동화를 서비스로 저장했습니다. 쉽게 재사용 할 수있게 만드는 데 약 10 초가 걸렸습니다.

  1. Automator를 엽니 다.
  2. 문서 유형으로 "서비스"를 선택합니다.
  3. 변경 서비스는 선택된 "텍스트"를 "파일 및 폴더"로 수신합니다.
  4. "모든 응용 프로그램"을 Finder로 변경하는 것을 고려하십시오.
  5. 사이드 바에서 "파일 및 폴더"(라이브러리 아래)를 선택하고 나열된 작업에서 가운데 ​​열에서 "Finder 항목 이름 바꾸기"를 오른쪽으로 끌어 "여기로 작업 또는 파일을 끌어 워크 플로를 구축합니다. "
  6. 방금 추가 한 작업을 "날짜 또는 시간 추가"에서 "순차로 만들기"로 변경합니다.
  7. 작업 하단에서 "옵션"을 클릭하고 "워크 플로가 실행될 때이 작업 표시"옵션을 선택합니다.
  8. "CMD + S"를 눌러 서비스를 "텍스트 교체"와 같은 형식으로 저장합니다.
  9. 끝난!

이제 Finder에서 선택 항목을 마우스 오른쪽 버튼으로 클릭하고 서비스 메뉴로 이동 한 다음 "텍스트 교체"를 선택하고 텍스트 변경 또는 교체 방법을 입력 한 다음 "계속"을 클릭하여 구성된 변경 사항을 적용 할 수 있습니다.


for n in *.MP4.mov
do
   mv $n $(echo $n | sed -e 's/.MP4//')
done

이것은 매개 변수 대체가없는 정말 오래된 쉘에서도 작동 할 것이며, 적어도 내 눈에는 좀 더 읽기 쉽습니다.


작업 인쇄를 테스트하려면 :

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";echo mv \"$file\" \"$j\"; done

작동하려면 :

for file in *.MP4.mov; do j=`echo $file | cut -d . -f 1`;j=$j".mov";mv "$file" "$j"; done

Mac OSX에서는 renameHomebrew를 통해 명령을 설치할 수 있습니다 .brew install rename

그런 다음 명령 줄의 해당 폴더에서 찾기 / 바꾸기를 사용하여 이름을 바꿀 수 있습니다.

rename 's/\.MP4\././' *

을 사용하여 더 많은 옵션을 볼 수도 있습니다 man rename.


OS X에는 Rename Files…Finder에서 두 개 이상의 파일을 선택할 때 호출되는 컨텍스트 메뉴 항목이 있습니다. 위의 Automator 답변과 동일한 기능을 제공합니다. Automator는 원하는 경우 더 나아갈 수있는 도구를 제공합니다.

(나는 OP가 터미널을 요청했지만 Automator 응답을 좋아하는 33 명을 알고 있습니다)


for i in `ls *png`;do echo mv $i "${i%%.*}"@xx."${i##*.}";done

vimv를 사용하면 Vim의 텍스트 편집 기능을 사용하여 여러 파일의 이름을 바꿀 수 있습니다.

Entering vimv opens a Vim window which lists down all files and you can do pattern matching, visual select, etc to edit the names. After you exit Vim, the files will be renamed.

[Disclaimer: I'm the author of the tool]


ls -1 *.MP4.mov | while read f; do mv -i "$f" "$(basename \"$f\" .MP4.mov)"; done

Edit: completly rewritten.


for i in *; 
do j=`echo $i | cut -d . -f 1`; 
j=$j".mov";
mv $i $j; 
done

this will cut everything before the first dot and appends .mov

but if some files are e.g. hi.2.mov and hi.1.mov one will be overwritten, so use it carefully ^^

참고URL : https://stackoverflow.com/questions/5394112/how-can-i-batch-rename-files-using-the-terminal

반응형