Скрипт для проверки файлов, более новых, чем аргумент, помощь с использованием -nt

Скрипт для проверки файлов, более новых, чем аргумент, помощь с использованием -nt

Я пытаюсь сделать скрипт, который показывает файлы в каталоге, более новые, чем тот, который указан в качестве аргумента, но, похоже, я столкнулся с проблемой. В настоящее время у меня есть:

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

Однако это продолжает давать мне ошибку, что команды не могут быть найдены в отношении файлов, которые перебираются. Как я могу исправить проблемы с этим скриптом?

решение1

Вам нужны места вокруг [[и]]

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

Без пробелов вы получите ряд ошибок "команда не найдена". Это происходит потому, что оболочка ищет команду по имени [["$f"и не может ее найти. Команда, которую вы хотите выполнить, — [[.

Альтернатива

Без необходимости зацикливания:

find . -maxdepth 1 -newer "$1"

решение2

Вам нужен пробел после [[и еще один перед ]]. Это перенесено из [, который традиционно является исполняемым файлом ( /bin/[, ссылающимся на /bin/test) — вам нужен был пробел, чтобы заставить его оцениваться как [с expressionаргументами, а не как [expression.

Хотя [[это ключевое слово bash, к нему предъявляются схожие требования.

Также обычно рекомендуется использовать [в скриптах POSIX-совместимость везде, где это возможно. [[не является стандартом и поэтому не будет работать на всех оболочках POSIX.

Связанный контент