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

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*