이전에 소개한 브라우저 캡쳐 프로그램 중 FireShot을 사용하면 저장할 때 네이밍 규칙에 따라서 파일명이 자동 생성된다.
FireShot Capture $번호$ - $캡쳐 사이트 이름$ - $캡쳐 사이트 URL$.png
이런 형태로 폴더가 지정되어 저장되는데, 한두장 할 때면 몰라도 여러장을 미친듯이 해야 하는 순간에는 너무너무 번거로웠다. (물론 무료 버전에서도 설정을 바꿀 수 있었지만, 몰랐다.)
그래서 우선 지정된 폴더에, 자동 생성된 이름으로 미친듯이 저장을 하고 이름을 변경하기로 마음 먹었다. 근데 그게 뭐 수십장이면 상관이 없었는데 100장이 넘어가고 나니 또.........코딩을 하고 싶었다.... 파이썬으로 간단하게 코딩하면 가능할거 같다는 생각이 들었다. 리눅스는 터미널 명령어를 알고 있어서 별도 프로그램 설치 없이 빠르게 할 수 있는데, cmd는 명령어를 잘 모르겠다.
근데 까맣게 있고 있었다. 컴퓨터 교체하면서 파이썬을 재설치해야 한다는 걸...... 세상 귀찮네...... 그러다가 파워쉘로 한번 도전해보자 싶어서 검색을 시작했다.
갑분 파워쉘
주절주절 파워쉘에 대한 이야기. 안궁금하다면, 다음 제목이 나올때까지 건너뛰기
✨ 터미널, CMD, 파워쉘
모두 컴퓨터에 명령을 입력하고 수행에 따른 결과를 출력하는 프로그램이다.
언젠가 라떼 부장님에게 또는 삼촌에게 DOS 시절...이런 얘기를 들어봤다면 대부분 터미널, CMD를 통해 컴퓨터를 조작했다는 썰이다.
뭔가 어려울거 같지만, 간단한 것들은 명령어가 더 편할 때도 있다.
예를 들면 특정 폴더에 있는 파일명을 문서로 출력한다거나, 특정 폴더에 있는 파일명을 일괄로 수정하고 싶을 때
자세한건 나보다 똑똑한 사람들이 설명할 것이다. 위키백과
흔히 터미널이라고 하면 리눅스 계열이고 cmd라고 하면 윈도우 계열인데, 언젠가 윈도우가 파워쉘이란 걸 내놨다.(신기하게도 파워쉘은 리눅스도 지원한다...) 왜인지 모르지만, 쉘스크립트 프로그래밍을 하는 곳 또는 윈도우 계열 서버를 관리하는 사람이라면 CMD나 파워쉘 명령어에 익숙해져야 한다.
리눅스 명령어는 맥에서도 그대로 사용할 수 있었는데, cmd나 파워쉘은 명령어가 달라서 손에 잘 안익는다.. 써버릇해야 익는건 만고불변의 진리인가보다. 해보지는 않았지만, 파워쉘 명령어는 기존 CMD 명령어에 비해 훨씬 장황한데 그래도 이해하면 편하다고는 카더라.
다시 본론
리눅스에서 파일명 바꾸는 명령어가 mv인가 rename인가 그랬던거 같은데, * 문자 사용해서도 한꺼번에 여러개를 할 수 있었고 말이다.
pdf 파일 중에 "정책__"을 포함하고 있는 파일명을 "정책_"으로 바꾸라는 명령어는 다음과 같다
리눅스
mv ./정책__*.pdf ./정책_*.pdf
rename 정책__ 정책_ *.pdf
mv는 항목을 옮기는(move) 명령어라서 directory 형태로 작성해야 한다.
rename은 pdf파일 중에서 A(정책__)를 B(정책)로 바꾸라는 의미라 두개가 미묘하게 다르다.
파워쉘
Get-ChildItem "*.pdf" | ForEach-Object {
Rename-Item $_.FullName -NewName ($_.Name -replace "정책__","정책_")
}
원래는 한줄로 쓰는게 맞지만 설명을 위해 가독성있게 줄바꿈 하였다.
구글 신이 알려준 파워쉘의 이름 변경은 리눅스의 rename과 유사하다. 구글 신의 답변을 따랐기 때문에 정확히, 세세하게 하나하나가 어떤 의미를 가지는지는 분석할 수 없다.
하지만 여기서 *이 의미하는건 "모든"이다. *의 자리에 어떤 것이 오더라도 .pdf를 포함하는 파일이 대상이 된다.
숫자 지우기
여기에 한가지 문제점이 있다. 파일명에 포함된 번호다. 숫자는 Capture된 순서에 따라 부여되어서 고정된 값이 아니라 변경되는 값이다.
FireShot Capture $번호$ - $캡쳐 사이트 이름$ - $캡쳐 사이트 URL$.png
어떤 형태를 정규표현식을 활용해서 넣을 수 있다.
Get-ChildItem "FireShot Capture*" | ForEach-Object {
Rename-Item $_.FullName -NewName ($_.Name -replace "\d+ - ","")
}
원래는 한줄로 쓰는게 맞지만 설명을 위해 가독성있게 줄바꿈 하였다.
"FireShot Capture*라는 문구를 포함한 모든 항목의 이름에서 숫자로 표현된 부분을 ""로 바꿔 주라는 명령어인다. ""는 실질적으로 공백도 아닌 아무것도 없는 값이니 지우는 것에 해당한다.
* 아스테리크라고도 말하는 별 기호는 그 자리에 공백을 포함한 어떤 문자나 숫자가 올 수 있다는 약속 기호이다. 마찬가지로 \d는 0-9 사이의 숫자를 의미한다.
터미널 명령어는 쓰다보면 매우 익숙해지는 툴과 같다. 하지만 당장 공부해야겠다 싶으면 뭐부터 해야할지 막막하니 터미널 명령어를 본격적으로 쓰는 사람이 아니라면 그냥 이런게 있군으로 이해하는게 나을 것이다.
리눅스로 쓰는게 익숙해서 파워쉘은 아직 친숙하지 않다. 그래도 가끔 생각날때마다 이 글의 내용을 한두번 검색했던거 같아서 노션에 백업해두기로 했다.
'얕은 개발 이야기' 카테고리의 다른 글
하나의 소스로 PC/Mobile에 최적화된 메일 코딩 (0) | 2024.12.03 |
---|---|
갑자기 분위기 이메일 코딩; 경험으로 쓰는 이메일 디자인/코딩 야매 가이드 (2) | 2023.09.07 |
단위에 관하여: px, em, rem, vh, vw (0) | 2022.01.28 |
파이썬으로 파일 복사 - 똑같은 파일을 파일명만 다르게 복제하기 (0) | 2021.07.15 |