Skript zum Suchen nach Dateien, die neuer sind als das Argument, Hilfe bei der Verwendung von -nt

Skript zum Suchen nach Dateien, die neuer sind als das Argument, Hilfe bei der Verwendung von -nt

Ich versuche, ein Skript zu erstellen, das Dateien im Verzeichnis anzeigt, die neuer sind als die als Argument angegebene, aber ich scheine auf ein Problem zu stoßen. Momentan habe ich:

for f in *; do 
    if [["$f" -nt "$1"]]; then 
        echo "$f"
    fi 
done

Allerdings erhalte ich immer wieder die Fehlermeldung, dass Befehle in Bezug auf die durchlaufenen Dateien nicht gefunden werden können. Wie kann ich die Probleme mit diesem Skript beheben?

Antwort1

Sie benötigen Leerzeichen um das [[und]]

for f in *; do
    if [[ "$f" -nt "$1" ]]; then
        echo "$f"
    fi
done

Ohne die Leerzeichen erhalten Sie eine Reihe von „Befehl nicht gefunden“-Fehlern. Das liegt daran, dass die Shell nach einem Befehl mit dem Namen sucht [["$f"und ihn nicht finden kann. Der Befehl, den Sie ausführen möchten, ist [[.

Alternative

Ohne dass eine Schleife erforderlich ist:

find . -maxdepth 1 -newer "$1"

Antwort2

Sie benötigen ein Leerzeichen nach dem [[und ein weiteres vor dem ]]. Dies ist ein Überbleibsel von [, das traditionell eine tatsächliche ausführbare Datei ( /bin/[, symbolisch verknüpft mit /bin/test) ist – Sie benötigten ein Leerzeichen, um die Auswertung als [mit expressionArgumenten statt als zu erzwingen [expression.

Obwohl [[es sich um ein Bash-Schlüsselwort handelt, gilt eine ähnliche Anforderung.

[Es wird außerdem grundsätzlich empfohlen , in Ihren Skripten nach Möglichkeit POSIX-kompatible Versionen zu verwenden . [[ist kein Standard und funktioniert daher nicht auf allen POSIX-Shells.

verwandte Informationen