Cp: verschil tussen versies
Regel 16: | Regel 16: | ||
<code>cp</code> overschrijft bestaande bestanden. Dit genereert geen foutmelding of waarschuwing. | <code>cp</code> overschrijft bestaande bestanden. Dit genereert geen foutmelding of waarschuwing. | ||
+ | |||
+ | Gebruik <code>-n</code> om overschrijving te voorkomen. Bv. | ||
+ | |||
+ | <pre> | ||
+ | cp -n /tmp/test.leeg /home/strompf/Desktop | ||
+ | </pre> | ||
+ | |||
+ | Als je nu de flag <code>-v</code> voor ''verbose'' toevoegt, krijg je weinig extra informatie: | ||
+ | |||
+ | * Als er wél wordt gekopiëerd, krijg je zoiets als feedback: <code>'/tmp/test.leeg' -> '/home/strompf/Desktop/test2.leeg'</code>. Als er niets wordt gekopiëerd, wordt er niets gemeld. | ||
== Kopiëer een map met inhoud == | == Kopiëer een map met inhoud == |
Versie van 21 jul 2019 11:21
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]
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.
Bronnen
- http://linuxdevcenter.com/pub/a/linux/lpt/18_15.html
- http://superuser.com/questions/61611/how-to-copy-with-cp-to-include-hidden-files-and-hidden-directories-and-their-con
- https://stackoverflow.com/questions/9392735/linux-how-to-copy-but-not-overwrite
- https://unix.stackexchange.com/questions/110282/cp-max-source-files-number-arguments-for-copy-utility
- https://askubuntu.com/questions/217764/argument-list-too-long-when-copying-files