Cp: verschil tussen versies
Regel 11: | Regel 11: | ||
== Kopiëer de inhoud van een map == | == Kopiëer de inhoud van een map == | ||
− | + | Voorbeelden: | |
− | cp -r * ~/in1 | + | cp -r * ~/in1 |
− | |||
− | + | cp -r ~/in1/* . | |
− | + | <pre> | |
− | + | # 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 | ||
+ | </pre> | ||
== cp -vrap == | == cp -vrap == |
Versie van 21 jul 2019 11:12
Kopiëer een bestand
cp a b
Kopiëer een map met inhoud
Bv.:
cp -r /media/sda1 /media/BackUp
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
[1]
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