web-dev-qa-db-ja.com

1つのファイルを多数のファイルにコピーするLinuxコマンド

Linuxで1つのファイルを多くのファイルにコピーする1行のコマンド/スクリプトはありますか?

cp file1 file2 file3

最初の2つのファイルを3番目のファイルにコピーします。最初のファイルを残りにコピーする方法はありますか?

36
user121196

する

cp file1 file2 ; cp file1 file3

「1行のコマンド/スクリプト」として数えますか?どう?

for file in file2 file3 ; do cp file1 "$file" ; done

または、「コピー」の感覚を少し緩くする場合:

tee <file1 file2 file3 >/dev/null
62
ruakh

ファイルの大きなリストが必要な場合は、ただ楽しみのために:

tee <sourcefile.jpg targetfiles{01-50}.jpg >/dev/null- ケルビン2月12日19時52分

しかし、少し誤字があります。する必要があります:

tee <sourcefile.jpg targetfiles{01..50}.jpg >/dev/null

そして、上記のように、それは許可をコピーしません。

4
Yevgen

rangesfrombash brace expansionを使用して、コピーのforアプローチ(@ruakhで回答)を改善/簡素化できます。

for f in file{1..10}; do cp file $f; done

これにより、filefile1, file2, ..., file10にコピーされます。

確認するリソース:

3
Lirt
for FILE in "file2" "file3"; do cp file1 $FILE; done
3
Matt

cat file1 | tee file2 | tee file3 | tee file4 | tee file5 >/dev/null

2
Isaiah Taylor

shiftを使用できます:

file=$1
shift
for dest in "$@" ; do
    cp -r $file $dest
done
1
user1247790

次のようなものを使用します。 zshで動作します。

catファイル> firstCopy> secondCopy> thirdCopy

または

catファイル> {1..100}-数字付きのファイル名用。

小さいファイルに適しています。

大きなファイルには、前述のcpスクリプトを使用する必要があります。

0
fane89

私が考えることができる最も簡単な/最も速い解決策はforループです:

for target in file2 file3 do; cp file1 "$target"; done

汚いハックは次のようになります(私はそれに対して強くお勧めしますが、とにかくbashでのみ動作します)。

eval 'cp file1 '{file2,file3}';'
0
knittl

代わりに、標準のスクリプトコマンドを使用できます。

バッシュ:

 for i in file2 file3 ; do cp file1 $i ; done
0
Wes Hardaker