Hoe een bestand naar meerdere mappen te kopiëren met één commando in Linux
Het kopiëren van een bestand met de Linux-opdrachtregel is eenvoudig. Wat als u hetzelfde bestand naar verschillende locaties wilt kopiëren? Dat is ook eenvoudig en we laten u zien hoe u dat doet met één opdracht.
Normaal gesproken zou u om het ene bestand te kopiëren, het cp
commando, linken naar het bronbestand en de doelmap:
cp ~ / Documents / FileToBeCopied.txt ~ / TextFiles /
Om het naar nog twee mappen te kopiëren, zouden veel mensen de opdracht nog twee keer uitvoeren, met verschillende bestemmingen:
cp ~ / Documents / FileToBeCopied.txt ~ / Dropbox /
cp ~ / Documents / FileToBeCopied.txt / media / lori / MYUSBDRIVE /
We kunnen echter dezelfde taak uitvoeren met één opdracht:
echo dir1 dir2 dir3 | xargs -n 1 cp-bestand1
Hier is hoe deze opdracht werkt. De echo
commando schrijft normaal gesproken naar het scherm. In dit geval willen we echter de uitvoer van de echo
commando als invoer voor de xargs
commando. Om dit te doen, gebruiken we het pijpsymbool ( |
) die de uitvoer van de ene opdracht voedt als invoer voor een andere. De xargs
commando zal de cp
commando drie keer, telkens het toevoegen van het volgende directorypad dat er vanaf de echo
commando aan tot het einde van de cp
commando. Er zijn drie argumenten die worden doorgegeven aan xargs
, maar de -n 1
optie op de xargs
commando geeft aan dat het slechts één van die argumenten tegelijk moet toevoegen aan de cp
opdracht elke keer dat het wordt uitgevoerd.
Dus om ons voorbeeld van eerder te volgen, zijn de drie gescheiden cp
bovenstaande commando's kunnen worden gecombineerd in één opdracht als deze:
echo ~ / TextFiles / ~ / Dropbox / media / lori / MYUSBDRIVE | xargs -n 1 cp ~ / Documents / FileToBeCopied.txt
Merk op dat als het bestand dat wordt gekopieerd bestaat in een van de gespecificeerde doelmappen, het bestand in die bestemming automatisch zal worden vervangen. U wordt niet gevraagd of u het bestand wilt vervangen. (Normaal gesproken wanneer u de cp
opdracht om een bestand naar een enkele locatie te kopiëren, kunt u de -ik
optie om te vragen of u een bestaand bestand wilt vervangen. echter, de -ik
optie is een interactieve optie (het veroorzaakt de cp
commando om invoer van de gebruiker te vragen) en u kunt geen interactieve optie gebruiken met de cp
commando bij gebruik in combinatie met xargs
.)
Een ander ding om te overwegen, is dat als je een heel groot bestand kopieert, je misschien het no-clobber wilt toevoegen ( -n
) optie voor de cp
commando in het enkele commando hierboven. Deze optie voorkomt automatisch dat een bestand wordt overschreven in een bestemming als het daar al bestaat. Als u een zeer groot bestand via een netwerk kopieert, is het mogelijk traag en wilt u mogelijk niet de bronnen gebruiken die nodig zijn om het bestand te kopiëren en te vervangen. Met de volgende opdracht wordt de -n
optie en kopieert het bestand niet naar een bestemming die wordt vermeld in de argumenten bij de echo-instructie, als het bestand al in die bestemming bestaat.
echo ~ / TextFiles / ~ / Dropbox / media / lori / MYUSBDRIVE | xargs -n 1 cp -n ~ / Documents / FileToBeCopied.txt
Typ man echo, man xargs of man cp op de opdrachtregel in Linux voor meer informatie over een van deze opdrachten.