Encontre e liste uma data e hora modificadas de um arquivo

0

Eu tenho vários diretórios no servidor cujos nomes começam com tomcat_ Sob este há um arquivo por exemplo managetest.class

Agora preciso obter apenas a data e a hora modificadas para esse arquivo específico no formato abaixo

Nome da pasta modifieddate

    
por yunus shaikh 26.11.2015 / 15:34

2 respostas

1

cd para o diretório em que os diretórios tomcat_* estão (eles não precisam estar todos no mesmo diretório) e execute o seguinte comando:

find . -path "./*tomcat_*managetest.class"

Isso corresponderá, por exemplo:

./b/tomcat_c/managetest.class
./tomcat_a/managetest.class
./tomcat_a/b/managetest.class

Mas não ./b/c/managetest.class . Deixe-me saber se managetext.class tem que estar imediatamente dentro de tomcat_* .

Agora, o comando completo para imprimir também a data modificada:

find . -path "./*tomcat_*managetest.class" -exec stat -c "%n %y" {} \;

Você pode selecionar os campos que você está mais interessado (como ano ou hora) com awk, escrevendo no final do comando acima algo como | awk '{print $1" "$2" "$3}' , ou, como gogoud sugeriu, em vez de usar exec, você pode usar find ' printf command.

    
por 26.11.2015 / 15:59
1

Como Ulrich sugeriu, você pode fazer isso com find desta forma:

find "/mydir" -type f -regex ".*/tomcat_.*/managetest.class" -printf "%h %T+\n"

ATUALIZAÇÃO:

para obter o formato desejado, podemos enviar a saída pelo awk:

find "/mydir" -type f -path "*/tomcat_*/managetest.class" -printf "%h %T+\n" | awk -F"[ /.]" '{print $(NF-4),$(NF-1)}'

A instrução awk divide a saída em campos em qualquer um dos caracteres em '[space] /.' - em seguida, imprime os campos que são quarto e primeiro do último, que devem ser os que você precisa, para que você não veja mais os diretórios de nível superior, o nome do arquivo ou os segundos divididos. (Eu também mudei para find ' -path em vez de -regex , mas ambos alcançam a mesma coisa.)

    
por 26.11.2015 / 15:59

Tags