Max_Args trotz for-Schleife überschritten...

N

nibel

Doppel-As
Hallo Leute,

ich habe ein kleines Problem mit einem Script von mir.
Ich habe das unten gezeigte Script geschrieben um sehr viele Dateien von einem Webserver wegzukopieren, leider kommt an einem bestimmten Punkt
die Fehlermeldung:
Code:
/root/findmv: line 11: /usr/bin/find: Die Argumentliste ist zu lang
Eigentlich dachte ich, dass ich das Maxargs Problem mit der For-Schleife gelöst hätte, dem ist aber anscheined nicht so...

Hat jemand eine Idee, was ich mach/ändern kann, damit ich's hin bekomme?

Grüße
nibel

Code:
#!/bin/sh
if [ ! -n "$1" ] ; then
        echo "Keine Parameter uebergeben!"
        echo "findmv <expression> <suchverzeichniss> <Zielverzeichnis>"
else
        for i in `find "$2" -name *"$1"*`
         do
                /bin/mv "$i" "$3"
        echo "Verschiebe $i nach $3"
        done
fi
 
Also wie ich das sehe, sprengt *"$1"* die Argumentliste, weil nicht find die * auflöst, sondern die Shell.
Aber wie du das hin bekommst, weiß ich auch nicht.
Schau dir übrigens mal die Option -exec von find an, dann sparst du dir die for-Schleife. Irgendwie so dann:
find ... -exec /bin/mv {} "$3"; echo "Verschiebe {} nach $3" \;
(Ob das so funktioniert musst du testen)
Aber dann brauchste ja fast nicht mehr das Skript drum rum :)

Ulix
 
Zuletzt bearbeitet:
Danke noch Mal, hat beides geklappt einmal mit den richtigen quotes und einmal mit find allein.

Wie immer klasse hilfe, prompt nocht dazu.

#exit
 
Noch ein Tipp: Der verlinkte Artikel ist qualitativ eher so naja, der Autor kennt nämlich xargs nicht. In diesem Thread war das Problem zwar das Quoting, aber wenn man mal auf das Problem stösst, dass man max args überschreitet hilft in der Regel find ..... -print0 | xargs -0 --max-args=1000 ....
Das teilt dann die Dateimenge in kleinere Häppchen auf.
 

Ähnliche Themen

Returncode ($?) bei find immer "0" ?

Switche abfragen über Script

Verschlüsseltes Backup-Script mit rsync

HandbrakeCLI Shell Skript

continue in Schleife einbauen

Zurück
Oben