web-dev-qa-db-ja.com

コマンドラインを使用してファイルを複数のフォルダーにコピーする方法は?

1つのコマンドでファイルtest.txtを複数のディレクトリにコピーしようとしました。

cp ~/test.txt ~/folder1 ~/folder2

しかし、私は成功しませんでした。 1つのコマンドでそれを行う方法がありますので、ファイルまたはフォルダを複数のディレクトリにコピーできますか?

65
nux

cpは複数のソースからコピーできますが、できないは複数の宛先にコピーします。詳細については、man cpを参照してください。

複数の宛先にコピー/保存できる唯一のbashコマンドは、teeです。

次のようにケースで使用できます。

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt

teeは、入力を標準出力(stdout)にも書き込むことに注意してください。そのため、これが望ましくない場合は、次のように標準出力を/dev/nullにリダイレクトすることで防止できます。

tee ~/folder1/test.txt ~/folder2/test.txt < ~/test.txt >/dev/null
70
Radu Rădeanu

複数の場所へのコピーを実現する別の方法は、次のコマンドです。

find dir1 dir2 -exec cp file.txt {} \;

Dir1またはdir2に、ファイルをコピーしたくないサブディレクトリがある場合は、-maxdepth 0optionを追加します。

find dir1 dir2 -maxdepth 0 -exec cp file.txt {} \;

これにより、dir1およびdir2のすべてのファイルが、コピーに加えてfile.txtのコンテンツで上書きされることに注意してください。これらのディレクトリ内の他のファイルに影響を与えずにfile.txtのみをコピーするには、ディレクトリに対してのみ動作するようfindに指示します。

find dir1 dir2 -type d -exec cp file.txt {} \;
61
Sylvain Pineau

コマンド

cp ~/test.txt ~/folder1 ~/folder2

2つのファイル(~/test.txtおよび~/folder1)をコピー先folder2にコピーしようとします。 (および~/folder2が存在し、ディレクトリである場合、「ディレクトリの省略」警告が表示されます)。

ファイルtest.txtの複数のコピーを作成する場合は、ループまたは複数のコマンドを使用する必要があります...

for i in ~/folder1 ~/folder2; do cp  ~/test.txt $i; done 

(...ファイル名にスペースが埋め込まれている場合は注意してください、引用符で囲む必要があります)。

ディレクトリ全体をコピーするには、-rオプションを使用する必要があります。

for i in ~/folder1 ~/folder2; do cp -r ~/folder3 $i; done

これにより、すべてのファイルが含まれる~/folder1/folder3および~/folder2/folder3が作成されます。

31
Rmano

ヘルプスクリプトを作成するか、xargsと印刷関数(この場合はecho)を使用して作成できます。

echo firstDir secondDir | xargs -n 1 cp test

これは、パラメーターとしてtest fileを使用して、各ディレクトリをcp関数の引数として作成します。

23
Evandro Silva

長い検索の後、この作品もチャームのようです!

for dir in *; do [ -d "$dir" ] && cp /path/file.txt "$dir" ; done

これにより、ターミナルの現在の場所にあるすべてのディレクトリにfile.txtがコピーされます。

for dir in *; do [ -d "$dir" ] && cp -rf /path/folder "$dir" ; done

これにより、フォルダーがターミナルの現在の場所にあるすべてのサブディレクトリにコピーされます。

他の人にも役立つことを願っています。

7
nux

/ tmp/target /のすべてのディレクトリにあるファイルtest.txtをコピーしたい場合...

テスト環境を作成します。

mkdir /tmp/target
cd /tmp/target
mkdir -v {folder1,folder2,folder3}
touch test.txt

コピーしてください:

find * -maxdepth 0 -type d -exec cp -vi test.txt {} \;
1
matt

Sylvain Pineauの答えにバリエーションを与えると考えられた

dir1dir2は現在のディレクトリにありません。

find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;

ここでfindはdir1 2レベルの深さを探すか、-maxdepthパラメーターを省略して、現在のディレクトリとその下のすべてのフォルダーでdir1を見つけることができます。

0
Joshi