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
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
:
( grep
verwendet reguläre Ausdrücke anstelle von Globs, daher sieht das Muster ein wenig anders aus.)
Ä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
BEARBEITEN
Eine andere Variante sollte mit nicht-GNU-Utils arbeiten
%Vor%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.