cpコマンドで一つのファイルを複数のディレクトリにコピーする

cpコマンドでは、「複数のファイルを1つのディレクトリに」コピーすることは簡単にできるのだが、「1つのファイルを複数のディレクトリに」コピーする場合はちょっと工夫が必要になる。
といっても基本的な方法で、xargsコマンドを使って複数ディレクトリを指定してcpコマンドを実行してやるだけだ。

xargs -n 1 cp -v file <<< "dir1 dir2 dir3" # ブレース展開が使えない
echo dir1 dir2 dir3 | xargs -n 1 cp -v file # ブレース展開が使える
Sponsored Links

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で処理してしまうのがきれいだ。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*