Script para verificar arquivos mais recentes que argumentos, ajuda usando -nt [closed]

2

Estou tentando criar um script que mostre arquivos no diretório mais recentes que um dado como argumento, mas pareço estar com 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 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?

    
por user3027681 27.01.2015 / 01:25

2 respostas

1

Você precisa de espaços em torno do [[ e do ]]

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 com o 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"
    
por 27.01.2015 / 01:38
0

Você precisa de um espaço após o [[ e outro antes do ]] . Esse é um carryover de [ , que é tradicionalmente um arquivo executável real ( /bin/[ , vinculado a /bin/test ) - você precisava de um espaço para forçá-lo a ser avaliado como [ com expression argumentos em vez de [expression .

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

Também é geralmente recomendado usar o [ 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.

    
por 27.01.2015 / 01:38

Tags