Cp

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Kopiëer een bestand

cp a b

Indien er geen absolute padnamen worden gebruikt, werkt cp locaal, dus relatief tov. de huidige PWD (Present Working Directory) [1]

Kopiëer los van PWD

Je kunt absolute padnamen gebruiken. Op die manier vindt kopiëren plaats, los van de huidige PWD. Voorbeeld:

cp /tmp/test.leeg /home/strompf/Desktop

Bestanden worden overschreven

cp overschrijft bestaande bestanden. Dit genereert geen foutmelding of waarschuwing.

Gebruik -n om overschrijving te voorkomen. Bv.

cp -n /tmp/test.leeg /home/strompf/Desktop

Als je nu de flag -v voor verbose toevoegt, krijg je weinig extra informatie:

  • Als er wél wordt gekopiëerd, krijg je zoiets als feedback: '/tmp/test.leeg' -> '/home/strompf/Desktop/test2.leeg'. Als er niets wordt gekopiëerd, wordt er niets gemeld.

Kopiëer een map met inhoud

Bv.:

cp -r /media/sda1 /media/BackUp

Nu wordt er een map /media/Backup/sda1 aangemaakt en gevuld.

Kopiëer de inhoud van een map

Voorbeelden:

cp -r * ~/in1
cp -r ~/in1/* .
# Kopiëer de inhoud van map "test.example.com" naar map "example.com"
# Let op: Map "example.com" moet al bestaan
#
cp -r test.example.com/* example.com   # De doelmap 'example.com' moet al bestaan

cp -vrap

Hier kwam ik de attributen -rap tegen. Wat is dat?

  • -v - Verbose - Dit was een operatie die een paar minuten duurde. Vandaar
  • -r - Recursie
  • -a - Archive - Misschien dat een archief-bit wordt behouden?
  • -p - Preserve - Behoud mode, ownership en timestamps.

Kopiëren van dot-bestanden

Zie Dot-bestanden kopiëren en verplaatsen

Kopiëren zonder overschrijving

-n [2]

Geeft echter feen foutmelding als de doelnaam al bestaat.

Argument list too long-error (juni 2019)

Het probleem

In een map met veel bestanden:

cp Koolborstels* tmp

bash: /bin/cp: Argument list too long

Oorzaak

Het commando cp Koolborstels* tmp wordt eerst geëxpandeerd om alle bestanden in de map te incorporeren. Binnen operating systems is er een maximum hoeveelheid geheugenruimte die daarvoor beschikbaar is. Die kun je zien mbv. GETCONF. Voorbeeld:

getconf ARG_MAX

2097152

En dit is 2097152/1024 = 2.048 KB = 2 MB.

Workaround met een loop

Er zijn diverse oplossingen. Eentje is door kopiëren in een loop te doen, waarbij er per keer maar één bestand wordt gekopiëerd.

Om te beginnen (ls is gemakkelijker voor testen):

for i in ./*; do ls "$i"; done

Dit toont alle bestanden in de map.

Dit sluit beter aan bij de situatie hierboven:

for i in ./Koolborstel*; do ls "$i"; done

En dit is de uiteindelijke oplossing:

for i in ./Koolborstel*; do cp "$i" /tmp -v; done

Met -v zodat je weet waar-ie in Godsnaam mee bezig is.

Zie ook

Bronnen