Script para verificar arquivos mais recentes que o argumento, ajuda usando -nt

Script para verificar arquivos mais recentes que o argumento, ajuda usando -nt

Estou tentando criar um script que mostre arquivos no diretório mais recentes do que aquele fornecido como argumento, mas parece que estou tendo um problema. Atualmente tenho:

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

No entanto, isso continua me dando um erro de que os comandos não podem ser encontrados em referência aos arquivos que estão sendo iterados. Como posso corrigir os problemas com este script?

Responder1

Você precisa de espaços ao redor [[e]]

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

Sem os espaços, você receberá uma série de erros de “comando não encontrado”. Isso ocorre porque o shell procura um comando pelo nome [["$f"e não consegue encontrá-lo. O comando que você deseja executar é [[.

Alternativa

Sem a necessidade de loop:

find . -maxdepth 1 -newer "$1"

Responder2

Você precisa de um espaço depois do [[e outro antes do ]]. Esta é uma transferência de [, que é tradicionalmente um arquivo executável real ( /bin/[, vinculado simbolicamente a /bin/test) - você precisava de um espaço para forçá-lo a ser avaliado como [com expressionargumentos em vez de [expression.

Embora [[seja uma palavra-chave bash, ela tem um requisito semelhante.

Também é geralmente recomendado usar compatível com POSIX [em seus scripts sempre que possível. [[não é padrão e, portanto, não funcionará em todos os shells POSIX.

informação relacionada