cpコマンドでは「複数のファイルを1つのディレクトリに」コピーすることは簡単にできるのだが、「1つのファイルを複数のディレクトリに」コピーする場合はちょっと工夫が必要になる。 といっても基本的な方法で、xargsコマンドを使って複数ディレクトリを指定してcpコマンドを実行してやるだけだ。
xargs -n 1 cp -v file <<< "dir1 dir2 dir3" # ブレース展開が使えない
echo dir1 dir2 dir3 | xargs -n 1 cp -v file # ブレース展開が使える
blacknon@BS-PUB-UBUNTU-01:~$ ls -al testdir{1,2,3}
testdir1:
合計 8
drwxrwxr-x 2 blacknon blacknon 4096 1月 18 23:10 .
drwxr-xr-x 18 blacknon blacknon 4096 1月 18 23:10 ..
testdir2:
合計 8
drwxrwxr-x 2 blacknon blacknon 4096 1月 18 23:10 .
drwxr-xr-x 18 blacknon blacknon 4096 1月 18 23:10 ..
testdir3:
合計 8
drwxrwxr-x 2 blacknon blacknon 4096 1月 18 23:10 .
drwxr-xr-x 18 blacknon blacknon 4096 1月 18 23:10 ..
blacknon@BS-PUB-UBUNTU-01:~$ xargs -n 1 cp -v test1 <<< "testdir1 testdir2 testdir3"
'test1' -> 'testdir1/test1'
'test1' -> 'testdir2/test1'
'test1' -> 'testdir3/test1'
blacknon@BS-PUB-UBUNTU-01:~$ echo testdir{1,2,3} | xargs -n 1 cp -v test2
'test2' -> 'testdir1/test2'
'test2' -> 'testdir2/test2'
'test2' -> 'testdir3/test2'
blacknon@BS-PUB-UBUNTU-01:~$ ls -al testdir{1,2,3}
testdir1:
合計 16
drwxrwxr-x 2 blacknon blacknon 4096 1月 18 23:11 .
drwxr-xr-x 18 blacknon blacknon 4096 1月 18 23:10 ..
-rw-rw-r-- 1 blacknon blacknon 834 1月 18 23:10 test1
-rw-rw-r-- 1 blacknon blacknon 834 1月 18 23:11 test2
testdir2:
合計 16
drwxrwxr-x 2 blacknon blacknon 4096 1月 18 23:11 .
drwxr-xr-x 18 blacknon blacknon 4096 1月 18 23:10 ..
-rw-rw-r-- 1 blacknon blacknon 834 1月 18 23:10 test1
-rw-rw-r-- 1 blacknon blacknon 834 1月 18 23:11 test2
testdir3:
合計 16
drwxrwxr-x 2 blacknon blacknon 4096 1月 18 23:11 .
drwxr-xr-x 18 blacknon blacknon 4096 1月 18 23:10 ..
-rw-rw-r-- 1 blacknon blacknon 834 1月 18 23:10 test1
-rw-rw-r-- 1 blacknon blacknon 834 1月 18 23:11 test2
基本は、ブレース展開が利用可能な方を使うのが無難だろうか。 findコマンドやteeコマンド、parallelコマンドを組み合わせてやる方法もあるにはあるが、やはりxargsで処理してしまうのがきれいだ。