28Jun

Kaip kopijuoti failą į keletą katalogų su viena komanda Linux

Failo kopijavimas su Linux komandine eilute yra lengva. Tačiau ką daryti, jei norite kopijuoti tą patį failą į kelias skirtingas vietas? Tai taip pat lengva, ir mes parodysime, kaip tai padaryti naudodami vieną komandą.

Paprastai kopijuoti vieną failą naudosite cp komandą, susiejant ją su šaltinio failu ir paskirties aplanku:

cp ~ /Documents/ FileToBeCopied.txt ~ /TextFiles/

Norėdami nukopijuoti jį į dar du katalogus, daugelis žmonių tiesiog paleisti komandą dudaugiau kartų su skirtingomis paskirtimis:

cp ~ /Documents/ FileToBeCopied.txt ~ /Dropbox/ cp ~ /Documents/ FileToBeCopied.txt /media/lori/MYUSBDRIVE/

Tačiau mes galime atlikti tą patį užduotį vienu komanda:

echo dir1 dir2 dir3 |xargs -n 1 cp file1

Štai kaip veikia ši komanda. Echo komanda paprastai rašo ekraną.Tačiau šiuo atveju norime, kad echo komandų išvestis būtų įvesta komandai xargs. Norėdami tai padaryti, mes naudojame vamzdžio simbolį( |), kuris perduoda iš vienos komandos kaip įvesties į kitą."Xargs" komanda paleis cp komandą tris kartus, kiekvieną kartą pridedant prie kito katalogo kelio, einančio iš komandų echo iki cp komandos pabaigos. Xargs perduoti trys argumentai, tačiau "xargs" komandoje esanti parinktis -n 1 nurodo, kad kiekvieną kartą, kai ji paleidžiama, vienu metu pridedamas vienas iš šių argumentų.

Taigi, norėdami pritvirtinti mūsų pavyzdį iš anksčiau, trys atskiri cp komandos gali būti sujungti į vieną komandą:

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp ~ /Documents/ FileToBeCopied.txt

Atkreipkite dėmesį, kad jei kopijuojamas failas egzistuoja bet kuriame nurodytame paskirties kataloge, toje paskirtyje esantis failas bus automatiškai pakeistas. Jums nereikės paklausti, ar norite pakeisti failą.(Paprastai, kai naudojate komandą cp, norėdami nukopijuoti failą į vieną vietą, galite pridėti -i parinktį, kad paklaustumėte, ar norite pakeisti esamą failą. Tačiau parinktis -i yra interaktyvi parinktis( tai sukeliacp komandą prašyti vartotojo įvesties) ir jūs negalite naudoti interaktyvios parinkties su cp komanda, kai naudojate ją kartu su xargs.)

Dar vienas dalykas, kurį reikia apsvarstyti, yra tai, kad jei kopijuosite labai didelį failą, galitenorėdami pridėti ne clobber( -n) parinktį komandai cp vienoje komandoje aukščiau.Ši parinktis automatiškai neleidžia įrašyti failo į paskirties vietą, jei jis ten jau yra. Jei kopijuojat labai didelį failą tinkle, jis gali būti lėtas ir galbūt norėsite nenaudoti išteklių, reikalingų failui kopijuoti ir pakeisti.Ši komanda prideda -n parinktį ir nebus nukopijuoti failo į bet kurį iš echo pareiškimo argumentų, jei failas jau yra toje paskirties vietoje.

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp -n ~ /Documents/ FileToBeCopied.txt

Jei norite gauti daugiau informacijos apie bet kurią iš šių komandų, įveskite komandą "Linux" komandų eilutėje "man echo", "man xargs" arba "man cp".