다수의 파일이 있고 이 파일들의 이름을 일관된 규칙으로 바꾸는 것을 생각해 보자. 예를 들어,

$ 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_HHMMSSYYMMDD_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