Argumentliste zu lang - Unix

8

Diese Skripts sortieren die Dateien nach Datum und verschieben dann die ersten 2500 Dateien in ein anderes Verzeichnis.
Wenn ich unter Scripts laufe, gibt das System die Argument-Liste zu lange msg aus. Jeder kann mir helfen, die Skripte zu verbessern? Danke

%Vor%     
user871695 31.07.2011, 16:15
quelle

4 Antworten

3

Sie haben nicht gesagt, aber ich nehme an, dass hier das Problem auftritt:

%Vor%

(Sie können es überprüfen, indem Sie oben in Ihrem Skript "set -x" hinzufügen.)

Das Problem besteht darin, dass der Kernel eine feste maximale Größe der Gesamtlänge der Befehlszeile hat, die einem neuen Prozess zugewiesen wird, und dass Sie diesen im Befehl ls überschreiten. Sie können umgehen, indem Sie kein globbing verwenden und stattdessen grep :

verwenden %Vor%

( grep verwendet reguläre Ausdrücke anstelle von Globs, daher sieht das Muster ein wenig anders aus.)

    
user25148 31.07.2011 16:34
quelle
2

Ändern

%Vor%

machen Sie etwas wie folgt:

%Vor%

Dies verwendet find, um eine Liste von Dateien mit Änderungszeitstempeln zu erstellen, sortiert nach dem Zeitstempel und entfernt dann das nicht benötigte Feld, bevor die Ausgabe an head und xargs

übergeben wird

BEARBEITEN

Eine andere Variante sollte mit nicht-GNU-Utils arbeiten

%Vor%     
Hasturkun 31.07.2011 16:40
quelle
1

Erstellen Sie zuerst eine Backup-Liste der zu behandelnden Dateien. Dann lies die Backup-Datei Zeile für Zeile und heile sie. Zum Beispiel

%Vor%     
Bytemain 31.07.2011 16:25
quelle
0

Eine schnelle Möglichkeit, dies zu beheben, wäre, zu $ ​​FROM_DIRECTORY zu wechseln, damit Sie die Dateien mit (kürzeren) relativen Pfaden beziehen können.

cd $FROM_DIRECTORY && ls -tr MSCERC*.Z|head -2500 |xargs -i sh -c "mv {} $DESTINATION_DIRECTORY"

Dies ist auch nicht völlig narrensicher, wenn Sie zu viele übereinstimmende Dateien haben.

    
Gowtham 31.07.2011 16:31
quelle

Tags und Links