28Jun

Hoe een bestand naar meerdere mappen te kopiëren met één commando in Linux

click fraud protection

Het kopiëren van een bestand met de Linux-opdrachtregel is eenvoudig. Maar 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, om één bestand te kopiëren, zou je de opdracht cp gebruiken, die linkt naar het bronbestand en de doelmap:

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

Om het naar twee andere mappen te kopiëren, zouden veel mensen gewoon de opdracht twee uitvoerenmeer tijden, met verschillende bestemmingen:

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

We kunnen echter dezelfde taak met één commando uitvoeren:

echo dir1 dir2 dir3 |xargs -n 1 cp file1

Zo werkt deze opdracht. De echo-opdracht schrijft normaal gesproken naar het scherm. In dit geval willen we echter de uitvoer van de echo-opdracht invoeren als invoer voor de opdracht xargs. Om dit te doen gebruiken we het pijpsymbool( |) dat de uitvoer van de ene opdracht voedt als invoer voor een andere. De opdracht xargs voert de opdracht cp driemaal uit, waarbij telkens het volgende directorypad wordt toegevoegd aan de piping van het echo-commando tot aan het einde van de opdracht cp. Er zijn drie argumenten die worden doorgegeven aan xargs, maar de optie -n 1 op de opdracht xargs vertelt dat deze slechts één van die argumenten tegelijkertijd toevoegt aan de opdracht cp telkens wanneer deze wordt uitgevoerd.

instagram viewer

Dus, om bij ons voorbeeld van eerder te blijven, kunnen de drie afzonderlijke cp-opdrachten hierboven 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 opgegeven doelmappen, het bestand in die bestemming automatisch zal worden vervangen. U wordt niet gevraagd of u het bestand wilt vervangen.(Als u de cp-opdracht gebruikt om een ​​bestand naar een enkele locatie te kopiëren, kunt u de optie -i toevoegen om te vragen of u een bestaand bestand wilt vervangen. De optie -i is echter een interactieve optie( hierdoor wordt decp-opdracht om invoer van de gebruiker te vragen) en u kunt geen interactieve optie gebruiken met de cp-opdracht wanneer u deze in combinatie met xargs gebruikt.)

Een ander ding om te overwegen, is dat als u een zeer groot bestand kopieert, u misschienwil de no-clobber( -n) optie toevoegen aan de cp-opdracht in de enkele bovenstaande opdracht. 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 optie -n toegevoegd en wordt het bestand niet naar een bestemming in de argumenten van de echo-instructie gekopieerd, 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.