仕事で、大量にあるファイルの一部分のみをリネームしてコピーを行いたい事があったので、その備忘。
イメージとしては、以下のようなファイルがあって、それの一部、例えば以下の例だとhostname_aaa_*をhostname_bbb_*へリネームコピーしたい、といった具合。
[root@localhost work]# ls -la /work
合計 32
drwxr-xr-x. 2 root root 4096 1月 3 09:20 .
dr-xr-xr-x. 18 root root 4096 1月 3 09:08 ..
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_000.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_001.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_002.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_003.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_004.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_005.txt
[root@localhost work]# grep "" /work/*
/work/hostname_aaa_000.txt:aaa_000
/work/hostname_aaa_001.txt:aaa_001
/work/hostname_aaa_002.txt:aaa_002
/work/hostname_aaa_003.txt:aaa_003
/work/hostname_aaa_004.txt:aaa_004
/work/hostname_aaa_005.txt:aaa_005
こういった場合に、いちいちファイルを一個づつコピーするなんて面倒な事はしたくない。
という訳で、以下のコマンドで一括コピーを行う事にした。
for i in `ls *コピー元*`; do cp $i `echo $i | sed "s/置換前文字列/置換後文字列/g"`; done
[root@localhost work]# ls -la /work
合計 32
drwxr-xr-x. 2 root root 4096 1月 3 09:25 .
dr-xr-xr-x. 18 root root 4096 1月 3 09:08 ..
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_000.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_001.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_002.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_003.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_004.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_005.txt
[root@localhost work]#
[root@localhost work]# grep "" /work/*
/work/hostname_aaa_000.txt:aaa_000
/work/hostname_aaa_001.txt:aaa_001
/work/hostname_aaa_002.txt:aaa_002
/work/hostname_aaa_003.txt:aaa_003
/work/hostname_aaa_004.txt:aaa_004
/work/hostname_aaa_005.txt:aaa_005
[root@localhost work]# for i in `ls /work/hostname_aaa_*.txt`; do cp $i `echo $i | sed "s/aaa/bbb/g"`; done
[root@localhost work]#
[root@localhost work]# ls -la /work
合計 56
drwxr-xr-x. 2 root root 4096 1月 3 09:26 .
dr-xr-xr-x. 18 root root 4096 1月 3 09:08 ..
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_000.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_001.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_002.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_003.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_004.txt
-rw-r--r--. 1 root root 8 1月 3 09:20 hostname_aaa_005.txt
-rw-r--r--. 1 root root 8 1月 3 09:26 hostname_bbb_000.txt
-rw-r--r--. 1 root root 8 1月 3 09:26 hostname_bbb_001.txt
-rw-r--r--. 1 root root 8 1月 3 09:26 hostname_bbb_002.txt
-rw-r--r--. 1 root root 8 1月 3 09:26 hostname_bbb_003.txt
-rw-r--r--. 1 root root 8 1月 3 09:26 hostname_bbb_004.txt
-rw-r--r--. 1 root root 8 1月 3 09:26 hostname_bbb_005.txt
[root@localhost work]#
[root@localhost work]# grep "" /work/hostname_bbb_00*
/work/hostname_bbb_000.txt:aaa_000
/work/hostname_bbb_001.txt:aaa_001
/work/hostname_bbb_002.txt:aaa_002
/work/hostname_bbb_003.txt:aaa_003
/work/hostname_bbb_004.txt:aaa_004
/work/hostname_bbb_005.txt:aaa_005
Ansibleのyamlファイルとかでホスト名ごとに作成されている場合とか(今回の場合それ)に使えるだろう。