Encontre dois arquivos de mudanças mais recentes e compare-os

1

Eu tenho um script que usa um arquivo .txt e os nomeia.

Gostaria de diferenciar as alterações entre as mais recentes & próximo ao novo arquivo.

É assim que eu posso selecioná-los:

ls -t -l | awk '{print $9}' | head -n1 | tail -n1 | tr -d ' ' | xargs echo FIRST=
ls -t -l | awk '{print $9}' | head -n2 | tail -n1 | tr -d ' ' | xargs echo SECOND=

Eu queria usar o xargs para exportar variáveis, e simplesmente fazer a diferença entre elas, como

diff $FIRST $SECOND

Mas a parte de exportação não funciona devido ao xargs.

Eu acho que toda a minha abordagem está errada.

    
por David Potočnik 16.02.2014 / 03:45

2 respostas

0

Isso funcionará e manipulará nomes de arquivos que contenham espaços.

b='ls -t -1 | head -n2'
first="$(echo "$b" | head -n1)"
second="$(echo "$b" | tail -n1)"
diff "$first" "$second"

Este método tem a vantagem de apenas analisar a lista de diretórios uma vez, se o diretório em que você estiver executando tiver muitos (muitos milhares) de arquivos, poderá ser mais rápido.

    
por 16.02.2014 / 05:24
1

Alterando muito pouco sua abordagem, mas obtém uma versão de trabalho:

first=$(ls -t | head -n1)
second=$(ls -t | head -n2 | tail -n1)
diff "$first" "$second"

Os itens acima não funcionam bem com nomes de arquivos com novas linhas incorporadas, etc. Para remover essa limitação, use:

ls -t --quoting-style=shell-always | head -n2 | xargs diff
    
por 16.02.2014 / 03:58