Script para buscar archivos más recientes que el argumento, ayuda con -nt

Script para buscar archivos más recientes que el argumento, ayuda con -nt

Estoy intentando crear un script que muestre archivos en el directorio más nuevos que uno dado como argumento, pero parece que tengo un problema. Actualmente tengo:

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

Sin embargo, esto me sigue dando el error de que no se pueden encontrar comandos en referencia a los archivos que se están iterando. ¿Cómo puedo solucionar los problemas con este script?

Respuesta1

Necesitas espacios alrededor del [[y]]

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

Sin los espacios, obtendrá una serie de errores de "comando no encontrado". Esto se debe a que el shell busca un comando con el nombre de [["$f"y no puede encontrarlo. El comando que desea ejecutar es [[.

Alternativa

Sin necesidad de hacer bucles:

find . -maxdepth 1 -newer "$1"

Respuesta2

Necesitas un espacio después del [[y otro antes del ]]. Este es un remanente de [, que tradicionalmente es un archivo ejecutable real ( /bin/[, vinculado simbólicamente a /bin/test): necesitaba un espacio para forzar que se evaluara [con expressionargumentos en lugar de [expression.

Si bien [[es una palabra clave bash, tiene un requisito similar.

En general, también se recomienda utilizar compatibilidad con POSIX [en sus scripts siempre que sea posible. [[no es estándar y por lo tanto no funcionará en todos los shells POSIX.

información relacionada