Prologue
한국어로 된 파일을 웹에서 스크래핑(크롤링) 등으로 받다 보면 이름이 유니코드로 바뀌어서 받아지는 경우가 많다...(특히 맥에서도...) 파일이 한 ~10개정도라면 직접 바꿀 수 있다. 하지만 ~100개 정도라면 고민을 하게 되고 ~1000개 정도라면 코드를 짤 생각을 하게 된다.
리눅스에서는 두 가지 방법으로 가능하다. mv을 통해 스크립트를 짜서 바꾸는 방법이 먼저 떠오르지만, 이보다 똑똑하게 남들이 잘 짜놓은 rename을 이용해서 바꿀 수 있다는 사실을 알게된다면!?
mv
mv의 사용법은 간단하다.mv [from] [to]
mv는 전체 파일명을 입력하면 단일 파일만 되고, 경로/*
와 같은 방식으로 [from]
에 입력하면 해당경로에 있는 모든 파일을 이동한다. 추가 옵션을 이용하면 하위폴더에 있는 모든 파일도 이동이 가능하다. 하지만 여기서는 다루지 않겠음!
ex)mv abc.txt ./folder_1/
abc.txt를 현재폴더에 하위폴더인 egf폴더로 이동mv ./* ../folder_2/
현재폴더에 있는 모든 파일을 상위폴더에 위치한 folder_2로 옮기기mv abc.txt def.txt
현재폴더에 있는 abc.txt를 def.txt로 이동(변경)
이를 이용하면 스크립트로 열심히 짜면...... 되지만, 똑똑한 누군가는 이것을 이미 perl로 잘 만들어놓았다.
rename
Install
rename은 리눅스 기본 내장은 아니고 누군가가 perl로 만들어놓은 명령이다. 다음의 명령어로 쉽게 설치 가능하다.sudo apt install rename
Usage
rename [from] [to] [target]
참 쉽다. 파일명이 영어로만 되있었다면... 하지만 내 파일명들은 빌어먹게도%EA%B0%80%EB%8D%95%EB%8F%84
가 들어있다... 이녀석을 일괄적으로 가덕도
로 바꿔야 하는 것...rename %EA%B0%80%EB%8D%95%EB%8F%84 가덕도 \*.txt
로 쉽게 될줄 알았지만 실패... rename에 특수문자가 먹히지 않는 것 같다...
아 그리고 파일명이 이상하게 바뀌어서 폭망할 수 있기 때문에 -v -n
옵션을 알면 좋다.rename --help
로 더욱 자세한 설명을 볼 수있지만 우리의 시간은 소중하니, 직접 다룰 -v -n의 핵심만 찝어오면 다음과 같다.
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
Options:
-v, -verbose
Verbose: print names of files successfully renamed.
-n, -nono
No action: print names of files to be renamed, but don't rename.
-v
는 실행 결과를 자세히 보여주는 것이고-n
은 실재 실행은 아니고 예상 결과를 보여준다.
그리고 여기다가 s/
의 정규표현식이 나오는데, 자세히 설명할 수 없으니 그냥 그러려니 하시고 받아들이면 된다.
내가 원하는 예제는 다음과 같이 실행하면 된다.rename 's/%EA%B0%80%EB%8D%95%EB%8F%84/가덕도/' *.txt
즉, rename 's/[from]/[to]/' [target]
으로 실행하면 된다.
만약에 abc_abc_abc_*.txt
를 a_a_a_*.txt
로 바꾸고 싶다면, s/abc/a/g
처럼 맨 끝에 g만 넣으면 된다고 한다.(저는 직접 해보진 않았습니다.)
ref1-여기에나와있어요
'Server > Unix, Linux' 카테고리의 다른 글
리눅스 설치를 다 했는데 못읽을 때? feat. lib_xxx.so (0) | 2019.12.05 |
---|---|
ubuntu 18.04 한글 입력 안될 때 (0) | 2019.11.01 |
SSH로 GUI접속하기 with Matlab (feat. 대체 X가 뭐에요?) (0) | 2019.10.24 |
Ubuntu multi workspace (0) | 2019.10.10 |
Ubuntu 18.04에서 윈10 설치 with VirtualBox (0) | 2019.10.08 |