rename, 리눅스 쉘에서 다수의 파일 이름 변경하기
다수의 파일이 있고 이 파일들의 이름을 일관된 규칙으로 바꾸는 것을 생각해 보자. 예를 들어,
$ ls -la
...
-rw-rw-r-- 1 cublr cublr 3391353 5월 4 2018 '사진 실내 사무실_180504_205726.png'
-rw-rw-r-- 1 cublr cublr 7007269 5월 4 2018 '사진 실내 사무실_180504_213214.png'
-rw-rw-r-- 1 cublr cublr 1291059 5월 4 2018 '사진 실내 사무실_180504_215056.png'
-rw-rw-r-- 1 cublr cublr 400703 5월 14 2018 '사진 실내 사무실_180514_124333.png'
-rw-rw-r-- 1 cublr cublr 330105 5월 23 2018 '사진 실내 사무실_180523_102138.png'
-rw-rw-r-- 1 cublr cublr 10566762 6월 4 2018 '사진 실내 사무실_180531_235703.png'
-rw-rw-r-- 1 cublr cublr 1037585 6월 1 2018 '사진 실내 사무실_180601_162255.png'
-rw-rw-r-- 1 cublr cublr 509981 6월 3 2018 '사진 실내 사무실_180603_105721.png'
-rw-rw-r-- 1 cublr cublr 707879 6월 3 2018 '사진 실내 사무실_180603_112503.png'
-rw-rw-r-- 1 cublr cublr 140531 6월 4 2018 '사진 실내 사무실_180604_140245.png'
-rw-rw-r-- 1 cublr cublr 324474 6월 4 2018 '사진 실내 사무실_180604_172951.png'
-rw-rw-r-- 1 cublr cublr 3983909 6월 5 2018 '사진 실내 사무실_180605_175914.png'
-rw-rw-r-- 1 cublr cublr 711677 6월 15 2018 '사진 실내 사무실_180615_100944.png'
-rw-rw-r-- 1 cublr cublr 1011705 6월 15 2018 '사진 실내 사무실_180615_130751.png'
-rw-rw-r-- 1 cublr cublr 3044360 6월 15 2018 '사진 실내 사무실_180615_132859.png'
-rw-rw-r-- 1 cublr cublr 159246 6월 18 2018 '사진 실내 사무실_180618_160851.png'
-rw-rw-r-- 1 cublr cublr 1835600 6월 25 2018 '사진 실내 사무실_180625_154016.png'
-rw-rw-r-- 1 cublr cublr 197173 7월 9 2018 '사진 실내 사무실_180709_143645.png'
-rw-rw-r-- 1 cublr cublr 1239243 7월 16 2018 '사진 실내 사무실_180716_112645.png'
-rw-rw-r-- 1 cublr cublr 188590 7월 17 2018 '사진 실내 사무실_180717_105906.png'
-rw-rw-r-- 1 cublr cublr 402596 7월 17 2018 '사진 실내 사무실_180717_130725.png'
-rw-rw-r-- 1 cublr cublr 1241492 7월 17 2018 '사진 실내 사무실_180717_133850.png'
-rw-rw-r-- 1 cublr cublr 155896 7월 23 2018 '사진 실내 사무실_180723_134401.png'
-rw-rw-r-- 1 cublr cublr 193042 7월 23 2018 '사진 실내 사무실_180723_184908.png'
-rw-rw-r-- 1 cublr cublr 358271 7월 30 2018 '사진 실내 사무실_180730_133608.png'
-rw-rw-r-- 1 cublr cublr 94656 7월 31 2018 '사진 실내 사무실_180731_221556.png'
-rw-rw-r-- 1 cublr cublr 119824 8월 6 2018 '사진 실내 사무실_180806_142116.png'
-rw-rw-r-- 1 cublr cublr 12919051 3월 9 03:28 '사진 실내 사무실_190302_193833.png'
...
이를 한 번에 바꾸기 위해 파일 이름을 정규 표현식으로 적당히 선택해서 변경하는 것이 좋아 보인다. 리눅스에서는 rename
을 사용하여 처리할 수 있다.
사용법
간략한 설명은 다음과 같다.
$ rename --help
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.
-f, -force
Over write: allow existing files to be over-written.
-h, -help
Help: print SYNOPSIS and OPTIONS.
-m, -man
Manual: print manual page.
-V, -version
Version: show version number.
-e Expression: code to act on files name.
May be repeated to build up code (like "perl -e"). If no -e, the
first argument is used as code.
-E Statement: code to act on files name, as -e but terminated by
';'.
다양한 옵션이 있지만 간단히 줄여서 설명하면 다음과 같다.
rename PATTERN FILES
여기에 옵션 -v
, -n
을 사용하여 실제로 변경이 어떻게 이루어지는지를 확인할 수 있다.
예 1
위 로그를 다시 쓰면 아래와 같다.
-rw-rw-r-- 1 cublr cublr 3391353 5월 4 2018 '사진 실내 사무실_180504_205726.png'
-rw-rw-r-- 1 cublr cublr 7007269 5월 4 2018 '사진 실내 사무실_180504_213214.png'
-rw-rw-r-- 1 cublr cublr 1291059 5월 4 2018 '사진 실내 사무실_180504_215056.png'
-rw-rw-r-- 1 cublr cublr 400703 5월 14 2018 '사진 실내 사무실_180514_124333.png'
-rw-rw-r-- 1 cublr cublr 330105 5월 23 2018 '사진 실내 사무실_180523_102138.png'
-rw-rw-r-- 1 cublr cublr 10566762 6월 4 2018 '사진 실내 사무실_180531_235703.png'
-rw-rw-r-- 1 cublr cublr 1037585 6월 1 2018 '사진 실내 사무실_180601_162255.png'
-rw-rw-r-- 1 cublr cublr 509981 6월 3 2018 '사진 실내 사무실_180603_105721.png'
-rw-rw-r-- 1 cublr cublr 707879 6월 3 2018 '사진 실내 사무실_180603_112503.png'
-rw-rw-r-- 1 cublr cublr 140531 6월 4 2018 '사진 실내 사무실_180604_140245.png'
-rw-rw-r-- 1 cublr cublr 324474 6월 4 2018 '사진 실내 사무실_180604_172951.png'
-rw-rw-r-- 1 cublr cublr 3983909 6월 5 2018 '사진 실내 사무실_180605_175914.png'
-rw-rw-r-- 1 cublr cublr 711677 6월 15 2018 '사진 실내 사무실_180615_100944.png'
-rw-rw-r-- 1 cublr cublr 1011705 6월 15 2018 '사진 실내 사무실_180615_130751.png'
-rw-rw-r-- 1 cublr cublr 3044360 6월 15 2018 '사진 실내 사무실_180615_132859.png'
-rw-rw-r-- 1 cublr cublr 159246 6월 18 2018 '사진 실내 사무실_180618_160851.png'
-rw-rw-r-- 1 cublr cublr 1835600 6월 25 2018 '사진 실내 사무실_180625_154016.png'
-rw-rw-r-- 1 cublr cublr 197173 7월 9 2018 '사진 실내 사무실_180709_143645.png'
-rw-rw-r-- 1 cublr cublr 1239243 7월 16 2018 '사진 실내 사무실_180716_112645.png'
-rw-rw-r-- 1 cublr cublr 188590 7월 17 2018 '사진 실내 사무실_180717_105906.png'
-rw-rw-r-- 1 cublr cublr 402596 7월 17 2018 '사진 실내 사무실_180717_130725.png'
-rw-rw-r-- 1 cublr cublr 1241492 7월 17 2018 '사진 실내 사무실_180717_133850.png'
-rw-rw-r-- 1 cublr cublr 155896 7월 23 2018 '사진 실내 사무실_180723_134401.png'
-rw-rw-r-- 1 cublr cublr 193042 7월 23 2018 '사진 실내 사무실_180723_184908.png'
-rw-rw-r-- 1 cublr cublr 358271 7월 30 2018 '사진 실내 사무실_180730_133608.png'
-rw-rw-r-- 1 cublr cublr 94656 7월 31 2018 '사진 실내 사무실_180731_221556.png'
-rw-rw-r-- 1 cublr cublr 119824 8월 6 2018 '사진 실내 사무실_180806_142116.png'
-rw-rw-r-- 1 cublr cublr 12919051 3월 9 03:28 '사진 실내 사무실_190302_193833.png'
이름에서 사진
과 실내
는 큰 의미가 없어 제외하고 싶다. 그리고 사무실보다 날짜를 먼저 오게 해서 다양한 장소를 추가하더라도 날짜순으로 이를 정렬하고 싶다. 사진 실내 사무실_YYMMDD_HHMMSS
를 YYMMDD_HHMMSS_사무실
로 변경하고 싶은 것이다. 필요한 것들을 그룹 지정하고 그것을 재배치하여 파일 이름을 치환하자. 아래와 같다.
$ rename -n -v 's/사진\ 실내\ (.+)_(.+)_(.+)\.png/$2_$3_$1.png/' *.png
rename(사진 실내 사무실_180430_101157.png, 180430_101157_사무실.png)
rename(사진 실내 사무실_180504_205726.png, 180504_205726_사무실.png)
rename(사진 실내 사무실_180504_213214.png, 180504_213214_사무실.png)
rename(사진 실내 사무실_180504_215056.png, 180504_215056_사무실.png)
rename(사진 실내 사무실_180514_124333.png, 180514_124333_사무실.png)
rename(사진 실내 사무실_180523_102138.png, 180523_102138_사무실.png)
rename(사진 실내 사무실_180531_235703.png, 180531_235703_사무실.png)
rename(사진 실내 사무실_180601_162255.png, 180601_162255_사무실.png)
rename(사진 실내 사무실_180603_105721.png, 180603_105721_사무실.png)
rename(사진 실내 사무실_180603_112503.png, 180603_112503_사무실.png)
rename(사진 실내 사무실_180604_140245.png, 180604_140245_사무실.png)
rename(사진 실내 사무실_180604_172951.png, 180604_172951_사무실.png)
rename(사진 실내 사무실_180605_175914.png, 180605_175914_사무실.png)
rename(사진 실내 사무실_180615_100944.png, 180615_100944_사무실.png)
rename(사진 실내 사무실_180615_130751.png, 180615_130751_사무실.png)
rename(사진 실내 사무실_180615_132859.png, 180615_132859_사무실.png)
rename(사진 실내 사무실_180618_160851.png, 180618_160851_사무실.png)
rename(사진 실내 사무실_180625_154016.png, 180625_154016_사무실.png)
rename(사진 실내 사무실_180709_143645.png, 180709_143645_사무실.png)
rename(사진 실내 사무실_180716_112645.png, 180716_112645_사무실.png)
rename(사진 실내 사무실_180717_105906.png, 180717_105906_사무실.png)
rename(사진 실내 사무실_180717_130725.png, 180717_130725_사무실.png)
rename(사진 실내 사무실_180717_133850.png, 180717_133850_사무실.png)
rename(사진 실내 사무실_180723_134401.png, 180723_134401_사무실.png)
rename(사진 실내 사무실_180723_184908.png, 180723_184908_사무실.png)
rename(사진 실내 사무실_180730_133608.png, 180730_133608_사무실.png)
rename(사진 실내 사무실_180731_221556.png, 180731_221556_사무실.png)
rename(사진 실내 사무실_180806_142116.png, 180806_142116_사무실.png)
rename(사진 실내 사무실_190302_193833.png, 190302_193833_사무실.png)
-v
를 사용하면 verbose모드이며 -n
은 실제로 파일을 변경하지 않는다. 따라서 결과만 먼저 확인할 수 있다. 결과를 보니 아주 만족스럽게 변경하는 것 같다.
$ rename -v 's/사진\ 실내\ (.+)_(.+)_(.+)\.png/$2_$3_$1.png/' *.png
사진 실내 사무실_180430_101157.png renamed as 180430_101157_사무실.png
사진 실내 사무실_180504_205726.png renamed as 180504_205726_사무실.png
사진 실내 사무실_180504_213214.png renamed as 180504_213214_사무실.png
사진 실내 사무실_180504_215056.png renamed as 180504_215056_사무실.png
사진 실내 사무실_180514_124333.png renamed as 180514_124333_사무실.png
사진 실내 사무실_180523_102138.png renamed as 180523_102138_사무실.png
사진 실내 사무실_180531_235703.png renamed as 180531_235703_사무실.png
사진 실내 사무실_180601_162255.png renamed as 180601_162255_사무실.png
사진 실내 사무실_180603_105721.png renamed as 180603_105721_사무실.png
사진 실내 사무실_180603_112503.png renamed as 180603_112503_사무실.png
사진 실내 사무실_180604_140245.png renamed as 180604_140245_사무실.png
사진 실내 사무실_180604_172951.png renamed as 180604_172951_사무실.png
사진 실내 사무실_180605_175914.png renamed as 180605_175914_사무실.png
사진 실내 사무실_180615_100944.png renamed as 180615_100944_사무실.png
사진 실내 사무실_180615_130751.png renamed as 180615_130751_사무실.png
사진 실내 사무실_180615_132859.png renamed as 180615_132859_사무실.png
사진 실내 사무실_180618_160851.png renamed as 180618_160851_사무실.png
사진 실내 사무실_180625_154016.png renamed as 180625_154016_사무실.png
사진 실내 사무실_180709_143645.png renamed as 180709_143645_사무실.png
사진 실내 사무실_180716_112645.png renamed as 180716_112645_사무실.png
사진 실내 사무실_180717_105906.png renamed as 180717_105906_사무실.png
사진 실내 사무실_180717_130725.png renamed as 180717_130725_사무실.png
사진 실내 사무실_180717_133850.png renamed as 180717_133850_사무실.png
사진 실내 사무실_180723_134401.png renamed as 180723_134401_사무실.png
사진 실내 사무실_180723_184908.png renamed as 180723_184908_사무실.png
사진 실내 사무실_180730_133608.png renamed as 180730_133608_사무실.png
사진 실내 사무실_180731_221556.png renamed as 180731_221556_사무실.png
사진 실내 사무실_180806_142116.png renamed as 180806_142116_사무실.png
사진 실내 사무실_190302_193833.png renamed as 190302_193833_사무실.png
예 2
yyyyMMddHHmmss.heic
파일 다수를 yyyy-MM-dd HH.mm.ss.heic
로 변경하기 위해서는 간단히는 다음과 같이 하면 된다.
$ rename 's/(....)(..)(..)_(..)(..)(..).heic/$1-$2-$3 $4.$5.$6.heic/' *.heic