Na linha de comando, 'find' reporta um valor de tempo ilegal

1

Eu quero executar o seguinte comando.

encontre. -mtime -60s

Quando faço isso, recebo esta saída:

CLIENT% echo 'date +%s'-1308741881 | bc
5152
CLIENT% find . -mtime -'echo 'date +%s'-1308741881 | bc's
-1308741881: Command not found.
find: -mtime: -date: illegal time value
CLIENT%

O que está acontecendo aqui?

    
por user87005 22.06.2011 / 09:32

1 resposta

6

O problema é que 'marcas são usadas para denotar comandos que a saída deve ser substituída em seu comando ... então seu comando é na verdade três comandos:

  1. "echo" (contido no primeiro conjunto de 1 marca)
  2. "- 1308741881 | bc" (contido no segundo conjunto de 1 marca)
  3. encontre. -mtime - SAÍDA DO COMANDO # 1 date +% s SAÍDA DO COMANDO # 2

O comando # 1 não produz nada, e o comando # 2 resulta no erro "Comando não encontrado", porque -1308741881 não é um comando válido, e também não produz nada.

Então, finalmente, o terceiro comando é executado, com essas substituições e é assim:

find . -mtime -date

E como "-date" não é um horário válido, ele também se queixa disso, dizendo "valor de hora ilegal"

O problema subjacente é que você está tentando usar marcas aninhadas, que o shell interpreta como dois comandos separados.

A melhor maneira de expressar o que você quer é isso (para bash):

find . -mtime -$(echo $(date +%s-1308741881) | bc)s

E para csh:

set now='date +%s-1308741881'; set date='echo $now | bc's; find . -mtime -$date

E possivelmente para outros shells (não testados):

NOW='date +%s-1308741881'; DATE='echo $NOW | bc'; find . -mtime -${DATE}s

P.S. Eu não acho que isso faz o que você espera ... seu comando de data está retornando um número de segundos, mas -mtime espera um número de dias como entrada. Eu estou supondo que você provavelmente vai querer ajustar o seu comando de data de acordo.

    
por 22.06.2011 / 09:40