複数のターゲットディレクトリにディレクトリをコピーするには?

複数のターゲットディレクトリにディレクトリをコピーするには?

複数のファイルとディレクトリを持つディレクトリがあります。ディレクトリとその内容の両方を複数のディレクトリにコピーするにはどうすればよいですか?つまり、同じコンテンツを複数のディレクトリにコピーする必要があります。

答え1

cp一人では不可能

cp次回のみコピー一つ目的地。

~から男CP

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

したがって、各ターゲットに対して一度、コマンドを2回実行する必要があります。

他の方法

ただし、以下を使用すると可能です。その他でコマンドを使用してくださいcp

~からLinuxでファイルを複数のディレクトリにコピーする方法

xargs

echo directory_1 directory_2 | xargs -n 1 cp file_1

ディレクトリの場合は、次を追加します。-r

echo directory_1 directory_2 | xargs -n 1 cp -r source_directory

find

find directory1 directory2 -exec cp file.txt {} \;

ディレクトリの場合は、次を追加します。-r

find directory1 directory2 -exec cp -r source_directory {} \;

シェルのループ

for dir in *; do [ -d “$dir” ] && cp /full_path/file.txt “$dir” ; done

ディレクトリの場合は、次を追加します。-r

for dir in *; do [ -d “$dir” ] && cp -r /full_path_to/source_directory “$dir” ; done

parallel

parallel cp -v /etc/resolv.conf ::: /directory1/, /directory2/

ディレクトリの場合は、次を追加します。-r

parallel cp -r source_directory ::: /directory1/, /directory2/

tee代わりに使用cp

同じリンクから

tee ~/directory1/file1 ~/directory2/file1 < ~/file1

または

tee ~/directory1/file1 ~/directory2/file1 < ~/file1 >/dev/nul

答え2

私が知っているすべてのツールには1つのターゲットしかないので、2回だけ実行してくださいcp(例rsync:)。

cp -r dir target1
cp -r dir target2

答え3

dstディレクトリのリストが配列変数にある場合は、ループを使用する必要がありますfor

srcdir=src/dir
dstdirs=( some/dir some/other/dir dir3 dir4 )
for dir in "${dstdirs[@]}"; cp -a -- "$srcdir" "$dir/"; done

(上記のzsh / bash / ksh93 / mksh構文の-aGNUオプションを使用してすべてをコピーします。)cp

コマンドが失敗した場合の対処方法を検討してくださいcp。つまり、ループを中断して全体の終了状態に報告します。

自分はコピーせずに内容だけをコピーするに に置き換えdirてください。"$srcdir""$srcdir/."

zsh(およびtartaringの前にディレクトリを入力するオプションをサポートする実装-C)を使用すると、cd次のこともできます。

tar -C $srcdir -cf - . > >(tar -C dir1 -xpf -) \
                       > >(tar -C dir2 -xpf -) \
                       > >(tar -C dir3 -xpf -)

$srcdir内容を一度だけ読むティー抽出は、同時に実行される3つのコマンドで行われますtar

関連情報