Obter lista de arquivos como saída do script?

0

Estou executando um script de shell que executa vários jars e, como resultado, grava em arquivos diferentes localizados em diretórios diferentes.

Eu quero obter lista de arquivos criados em um diretório como uma saída da execução do script na última execução.

Eu tenho o nome do meu arquivo como date_time_ABC.txt . Eu pensei em obter os nomes dos arquivos por data, mas em uma determinada data eu posso executá-lo muitas vezes, então eu vou pegar todos os arquivos, incluindo os criados em execuções anteriores também.

Existe uma maneira de obter a lista dos arquivos que são gerados após a execução do script de shell. Por favor sugira.

    
por Archit Goyal 23.07.2018 / 18:35

2 respostas

0

Apenas uma ideia. Mantenha 2 diretórios - um com os arquivos tocados pelo script (diretório de trabalho) e o segundo com os arquivos sincronizados (diretório espelho). Coloque na primeira linha do comando de sincronização de scripts:

rsync -xrlptgoEvv /home/user/work/ /home/user/mirror/

e no final do comando de script para detectar a diferença entre os diretórios work e mirror com o redirecionamento da saída para um arquivo de texto simples:

diff -rq /home/user/work/ /home/user/mirror/ > /home/user/list-of-files.txt

Você também pode filtrar a saída do comando diff com sed , awk etc. para obter o formato necessário dos seus dados. Considere também a opção --delete com rsync para remover dos arquivos de diretório mirror que foram excluídos do diretório work desde a última sincronização.

UPDATE. A melhor maneira possível é criar uma lista de arquivos em cima do script:

ls -la /home/user/work/ > /home/user/list-of-files.txt

e na parte inferior do script, inclua uma nova lista de arquivos na lista antiga, classifique-a e filtre linhas exclusivas que representarão apenas novos arquivos:

ls -la /home/user/work/ >> /home/user/list-of-files.txt
cat /home/user/list-of-files.txt | sort | uniq -u > /home/user/list-of-new-files.txt
    
por 23.07.2018 / 19:52
1

Se o seu tempo não contiver segundo , você pode usar ls com -u option:

-u with -lt: sort by, and show, access time; with -l: show access time and sort by name; otherwise: sort by access time, newest first

caso contrário, você poderia listar os arquivos atuais com ls -u -1>../Before e executá-lo novamente após seu código ls -u -1 > ../After , em seguida, usar comm -3 ../After ../Before e fazer seu trabalho

    
por 23.07.2018 / 19:53