Saya telah mencoba menyalin file test.txt
ke banyak direktori dengan satu perintah:
cp ~/test.txt ~/folder1 ~/folder2
Tetapi saya tidak berhasil. Apakah ada cara untuk melakukan itu dalam satu perintah sehingga saya dapat menyalin file atau bahkan folder ke beberapa direktori?
command-line
cp
nux
sumber
sumber
for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Jawaban:
cp
dapat menyalin dari berbagai sumber, tetapi tidak dapat menyalin ke berbagai tujuan. Lihatman cp
untuk info lebih lanjut.Satu-satunya perintah bash yang saya tahu yang dapat menyalin / menyimpan ke beberapa tujuan adalah
tee
.Anda dapat menggunakannya dalam kasus Anda sebagai berikut:
Catatan yang
tee
juga menulis input ke output standar (stdout). Jadi, jika Anda tidak menginginkan ini, Anda dapat mencegahnya dengan mengarahkan ulang output standar/dev/null
sebagai berikut:sumber
>/dev/null
karya dengan file biner juga, tanpa mengacaukan terminal ...-r
opsicp
dalam hal direktoritee
tidak seperticp
salinan, hanya konten file yang mengabaikan modenya, kepemilikan, cap waktu. Untuk menghindari pengulangan nama file:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$f
Cara lain untuk mencapai salinan ke beberapa lokasi adalah perintah berikut:
Jika dir1 atau dir2 memiliki sub-direktori di mana Anda tidak ingin file tersebut disalin, tambahkan
-maxdepth 0
opsi:Perhatikan bahwa ini akan menimpa setiap file di dalam
dir1
dandir2
denganfile.txt
konten, selain menyalinnya. Untuk hanya menyalinfile.txt
tanpa mempengaruhi file lain di direktori ini, katakanfind
untuk hanya bertindak pada direktori:sumber
find
dan dua kali (dalam hal ini)cp
. Bukan untuk mengatakan bahwafind
butuh banyak waktu.Perintah
mencoba menyalin dua file (
~/test.txt
dan~/folder1
) ke tujuanfolder2
. (Dan jika~/folder2
ada dan merupakan direktori Anda akan memiliki peringatan "menghilangkan direktori").Jika Anda ingin membuat banyak salinan file
test.txt
, Anda harus menggunakan loop atau beberapa perintah ...(... dan berhati-hatilah jika Anda memiliki ruang yang disematkan dalam nama file, Anda perlu mengutip).
Untuk menyalin seluruh direktori Anda harus menggunakan
-r
opsi:ini akan membuat
~/folder1/folder3
dan~/folder2/folder3
dengan semua file disertakan.sumber
Anda dapat membuat skrip bantuan, atau Anda dapat melakukannya dengan
xargs
dan fungsi cetak (dalam hal ini,echo
):Ini akan membuat setiap direktori sebagai argumen ke
cp
fungsi, menggunakan file uji sebagai parameter.sumber
Setelah pencarian yang panjang karya ini seperti Mantra juga!
Ini akan menyalin file.txt ke setiap direktori di lokasi Anda saat ini di terminal.
Ini akan menyalin folder ke setiap sub direktori di lokasi Anda saat ini di terminal.
Saya membagikannya berharap ini membantu orang lain juga.
sumber
zsh
, Anda dapat menggunakanfor i in *(/); ...
untuk mengulang semua subdirektori, sehingga Anda dapat menghindari[ -d ...
tes. Globbing yang diperpanjang adalah salah satu alasan saya menyukainyabash
.zsh
, perintah pertama dari jawaban ini dapat disederhanakan sebagaifor dir in *(/); do cp /path/file.txt "$dir"; done
. Lihat zsh.sourceforge.net/Intro/intro_2.htmlfor dir in */;
Jika Anda ingin menyalin file test.txt di setiap direktori di / tmp / target / ...
buat lingkungan pengujian:
salin:
sumber
Hanya berpikir untuk memberikan variasi jawaban
Sylvain Pineau
di mana
dir1
dandir2
tidak di direktori Anda saat ini.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
di sini temukan akan mencari
dir1
dua level dalam atau Anda dapat meninggalkan-maxdepth
parameter untuk menemukandir1
di semua folder di direktori saat ini dan di bawahnya.sumber