/bin/cp: Argument list too long

Giorgos Keramidas keramida at ceid.upatras.gr
Thu Oct 31 00:18:16 EET 2002


On 2002-10-28 19:29, Alexandros Papadopoulos <apapadop at cmu.edu> wrote:
>
> Twra ayto pou me apasxolei einai giati otan paw na antigrapsw enan
> fakelo me ~12000 arxeia mesa, pairnw thn ekshs apanthsh:
>
> [alex at localhost ~/Mail2/.Linux.directory/Hellug/cur]$ cp * /home/alex/Mail/HELLUG/cur/
> bash: /bin/cp: Argument list too long
>
> ...kai pws mporw na to kseperasw?

Σε απασχολεί να μάθεις γιατί γίνεται αυτό, ή να βρεις ένα τρόπο να το
ξεπεράσεις;

Τα shells έχουν ένα περιορισμό στο πόσο μεγάλο μπορεί να γίνει ένα
command-line μετά την ανάπτυξη οποιωνδήποτε "backquoted" εντολών και
μεταβλητών περιβάλλοντοςς.  Αυτό γίνεται για να μην κάνεις κατά λάθος
καμιά εξυπνάδα και ξαφνικά το shell κάνει allocate όλη τη μνήμη του
συστήματος για να κρατήσει τις παραμέτρους που θα περάσει στην
διεργασία που θα εκτελέσει.  Το πλήρες command line υπάρχει στη μνήμη
τουλάχιστον μια φορά όταν ένα πρόγραμμα όπως το shell σου κάνει exec()
και τρέξει κάποια εντολή.  Σκέψου το καημένο το kernel τι ζόρια θα
τράβαγε αν του πέταγες ξαφνικά στη μάπα ένα command line με μέγεθος
περίπου δυο φορές όσο η φυσική μνήμη του συστήματος!

Για να μην πέφτεις εσύ όμως με τα μούτρα πάνω στο όριο, έχεις δυο
επιλογές στη συγκεκριμένη περίπτωση (περισσότερες σε κάποιες άλλες
περιπτώσεις, ή αν γράψεις κάτι που χρησιμοποιεί τις find & xargs).

1. Μπορείς να αντιγράψεις τον προηγούμενο κατάλογο αυτούσιο.  Έτσι
δεν θα υπάρχει η λίστα με όλα τα αρχεία στο command line, αλλά η cp(1)
θα κάνει τα μαγικά της αντιγράφοντας όλα τα αρχεία:

[alex at localhost ~/Mail2/.Linux.directory/Hellug]$ cp -Rp cur ../HELLUG

2. Μπορείς να χρησιμοποιήσεις το tar(1) για να φτιάξεις ένα "on the
   fly" tarball, το οποίο πάλι με το tar(1) θα αποσυμπιέσεις στο σωστό
   μέρος.

[alex at localhost ~/Mail2/.Linux.directory/Hellug/cur]$ tar cf - . | ( cd ../HELLUG/cur ; tar xf - )

<bernstein-sucks-mode>
Μπορείς επίσης να σταματήσεις να χρησιμοποιείς την αηδία το Maildir/
που μεταφέρει το φόρτο στο filesystem και να βάλεις ένα Αληθινό Mail
Server(TM) :P
</bernstein-sucks-mode>

Γιώργος.



More information about the Linux-greek-users mailing list