1つのコマンドでファイルtest.txt
を複数のディレクトリにコピーしようとしました。
cp ~/test.txt ~/folder1 ~/folder2
しかし、私は成功しませんでした。 1つのコマンドでそれを行う方法がありますので、ファイルまたはフォルダを複数のディレクトリにコピーできますか?
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
複数の場所へのコピーを実現する別の方法は、次のコマンドです。
find dir1 dir2 -exec cp file.txt {} \;
Dir1またはdir2に、ファイルをコピーしたくないサブディレクトリがある場合は、-maxdepth 0
optionを追加します。
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 {} \;
コマンド
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
が作成されます。
ヘルプスクリプトを作成するか、xargs
と印刷関数(この場合はecho
)を使用して作成できます。
echo firstDir secondDir | xargs -n 1 cp test
これは、パラメーターとしてtest fileを使用して、各ディレクトリをcp
関数の引数として作成します。
長い検索の後、この作品もチャームのようです!
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
これにより、フォルダーがターミナルの現在の場所にあるすべてのサブディレクトリにコピーされます。
他の人にも役立つことを願っています。
/ 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 {} \;
Sylvain Pineau
の答えにバリエーションを与えると考えられた
dir1
とdir2
は現在のディレクトリにありません。
find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
ここでfindはdir1
2レベルの深さを探すか、-maxdepth
パラメーターを省略して、現在のディレクトリとその下のすべてのフォルダーでdir1
を見つけることができます。