Script sha256sum criando .txt em subdiretorios

1. Script sha256sum criando .txt em subdiretorios

joao romeo
jrbusca

(usa Lubuntu)

Enviado em 19/10/2021 - 17:19h

Ola,

Pouco conhecimento em shell bash, gostaria de saber se alguém aí pode me ajudar com script, com arvores de diretorios com subdiretorios e muito profunda

/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7 ... a20

/Volume/WD/B/1/b2/b3... b10

Dentro de cada sudir (a1/a2/a25 e b1/b2/b10), muitos arquivos (.txt,.pdf, .jpg, .doc, ...)

pretendo monitorar MANUALMENTE, de tempos em tempos a saude dos arquivos (.txt,.pdf, .jpg, .doc, ...).

Hoje, manualmente eu abro terminal

cd /Volume/WD/A/a1/a2/a3/a4/a5/a6/a7

find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A7.txt

sha256sum çat a7.txt > SaudeA7.txt

depois:

cd /Volume/WD/A/a1/a2/a3/a4/a5/a6/

find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A6.txt

sha256sum çat a6.txt > SaudeA6.txt

sucessivamente...

como fazer o script para

1)fornecendo o diretorio
ex:/Volume/WD/A

2 )ele busca o nivel mais fundo
ex:/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7

3) cria uma lista com sha256sum

4)salva com nome do subdir (a7) no subdir (a7)

/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7/Saudea7.txt

5) volta fazendo o mesmo em a6,a5,a4,a3,a2,a1

Obrigado!



  


2. Re: Script sha256sum criando .txt em subdiretorios

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/10/2021 - 18:10h


jrbusca escreveu:

Ola,

Pouco conhecimento em shell bash, gostaria de saber se alguém aí pode me ajudar com script, com arvores de diretorios com subdiretorios e muito profunda

/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7 ... a20

/Volume/WD/B/1/b2/b3... b10

Dentro de cada sudir (a1/a2/a25 e b1/b2/b10), muitos arquivos (.txt,.pdf, .jpg, .doc, ...)

pretendo monitorar MANUALMENTE, de tempos em tempos a saude dos arquivos (.txt,.pdf, .jpg, .doc, ...).

Hoje, manualmente eu abro terminal

cd /Volume/WD/A/a1/a2/a3/a4/a5/a6/a7

find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A7.txt

sha256sum çat a7.txt > SaudeA7.txt

depois:

cd /Volume/WD/A/a1/a2/a3/a4/a5/a6/

find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A6.txt

sha256sum çat a6.txt > SaudeA6.txt

sucessivamente...

como fazer o script para

1)fornecendo o diretorio
ex:/Volume/WD/A

2 )ele busca o nivel mais fundo
ex:/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7

3) cria uma lista com sha256sum

4)salva com nome do subdir (a7) no subdir (a7)

/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7/Saudea7.txt

5) volta fazendo o mesmo em a6,a5,a4,a3,a2,a1

Obrigado!

Sugestão:
Gera os diretórios em ordem decrescente:
for n in {10..1};do
_dir="/Volume/WD/A/"$(eval printf "a%s" {1..$n}'/');
printf "${_dir}\n";
#Coloque seus comandos
#Use a var "$_dir" no find, e limite a profundidade, deve procurar somente no dir especificado.
done

/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7/a8/a9/a10/
/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7/a8/a9/
/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7/a8/
/Volume/WD/A/a1/a2/a3/a4/a5/a6/a7/
/Volume/WD/A/a1/a2/a3/a4/a5/a6/
/Volume/WD/A/a1/a2/a3/a4/a5/
/Volume/WD/A/a1/a2/a3/a4/
/Volume/WD/A/a1/a2/a3/
/Volume/WD/A/a1/a2/
/Volume/WD/A/a1/




______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



3. Re: Script sha256sum criando .txt em subdiretorios

joao romeo
jrbusca

(usa Lubuntu)

Enviado em 19/10/2021 - 18:24h

Ola Marcelo, obrigado pela atencao

Eclaro que a arvore de diretorios possui nomes diferentes, exemplo

Multimedia
musica Portenha

videos
Instrucao de Salto
caçoaba




etc..

como faco quando e assim

obrigado


4. Re: Script sha256sum criando .txt em subdiretorios

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 19/10/2021 - 22:52h

jrbusca escreveu:
Ola Marcelo, obrigado pela atencao
É claro que a arvore de diretorios possui nomes diferentes, exemplo
Multimedia
musica Portenha
videos
Instrucao de Salto
caçoaba
etc..
como faco quando e assim
obrigado

Eclaro que a arvore de diretorios possui nomes diferentes, exemplo
Sim, obviamente!

Sugestão:
Busque somente pelos diretórios iniciais, e coloque em uma var,
percorra a mesma com um laço, e execute o que deseja.
------------------------------------------------------------------------
Em tempo:
Para checar a integridade/saúde dos arquivos, é mais recomendado o "fsck".
Do modo que está fazendo, posteriormente, terá que comparar o sha256sum de cada arquivo, e,
se o arquivo foi alterado, o sha256sum mudou, e isso não indica que o arquivo está corrompido.....

______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



5. Re: Script sha256sum criando .txt em subdiretorios

joao romeo
jrbusca

(usa Lubuntu)

Enviado em 20/10/2021 - 19:34h

Desculpe-me o novato nao consegue fazer bash script somente executar comandos.

Por favor e possivel vc ou qualquer outro membro que sabe fazer e sendo possivel explicar a solucao nos itens 2 e 4

continuo na mesma obrigado


6. Re: Script sha256sum criando .txt em subdiretorios

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 20/10/2021 - 21:21h

jrbusca escreveu:

Desculpe-me o novato nao consegue fazer bash script somente executar comandos.

Por favor e possivel vc ou qualquer outro membro que sabe fazer e sendo possivel explicar a solucao nos itens 2 e 4
continuo na mesma obrigado

Se sabe executar comandos.....
É só organiza-los, seguindo uma lógica, isso é um script...
Exemplo:
Objetivo :
Saber em quais dias pode ocorrer a segunda-feira na quarta semana do mês.

for a in {2012..2021};do 
for m in {1..12};do
cal -m${m} $a|awk 'NR==6{print $2}';
done;
done|sort -u

Laço dos Anos, de 2012 a 2021 => for a in {2012..2021}
Laço dos meses => for m in {1..12}
Executo o comando:
cal Mês Ano, busco pelo 6º registro (é a quarta semana), e "pego" o campo 2 (É a segunda-feira),
    Outubro 2021        1º Registro
do se te qu qu se sá
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
01 02 03 04 05 06 07 => Campos

sort -u => Mostra resultados únicos.

----------------------------------------------------------------------
Qual a dificuldade no seu script?


______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



7. Re: Script sha256sum criando .txt em subdiretorios

joao romeo
jrbusca

(usa Lubuntu)

Enviado em 21/10/2021 - 01:03h


Obrigado marcelo, que bom que pode ajudar.

digitarei numerado pois fica mais facil para voce ajudar-me e eu perguntar caso nao entenda a sua explicacao a resposta.

Possuo 09 diretorios no raiz, com nomes diverso (aulas de 2021, 01 Multimedia, 05 work avulso!, #00 para Arrumar,etc...)

0- Abri o terminal

1 digitei cd

2 arrastei o diretorio Ex: #00 para Arrumar

3 voltei com a seta para digitar a \ Ex: 01\ Multimedia

4 resultado ficou Ex: cd 01\ Multimedia

5 entrei no diretorio, listei os arquivos Ex: ls foi listado varios arquivos e varios subdiretorio Ex:coral2020

6 executei o comando Ex: find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A7.txt

7 tenho assim no arquivo texto a7.txt, somente os arquivos EX: musica.mp3 seu sha; outra linha fotodoenconcontro.jpg seu sha etc...

8 digitei cd Ex:coral2020

9 repito 6 digitando outro nome Ex: coralic.txt

10 vou realizando esta repeticao ate o 18 nivel de profundidade de subdiretorios tendoa assim sha de todos os arquivos por subdretorio.

A-) NAO sei automatizar, NAO sei fazer este script

B-)voce pode ajudar, voce pode faze-lo

c-) o que voce nao entendeu, para tentar ajudar-me

- Nomes aleatorios (contendo espaco e outros caracteres)
= tipos variados (.pdf,.txt,.jpg,.mp3, .doc, .ppt, .xls)
- Profundidades aleatorias depende do raiz





8. Re: Script sha256sum criando .txt em subdiretorios

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/10/2021 - 03:11h

jrbusca escreveu:
Obrigado marcelo, que bom que pode ajudar.
digitarei numerado pois fica mais facil para voce ajudar-me e eu perguntar caso nao entenda a sua explicacao a resposta.

Possuo 09 diretórios no raiz, com nomes diverso (aulas de 2021, 01 Multimedia, 05 work avulso!, #00 para Arrumar,etc...)

0- Abri o terminal

1 digitei cd

2 arrastei o diretório Ex: #00 para Arrumar

3 voltei com a seta para digitar a \ Ex: 01\ Multimídia

4 resultado ficou Ex: cd 01\ Multimedia

5 entrei no diretório, listei os arquivos Ex: ls foi listado varios arquivos e varios subdiretorio Ex:coral2020

6 executei o comando Ex: find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A7.txt

7 tenho assim no arquivo texto a7.txt, somente os arquivos EX: musica.mp3 seu sha; outra linha fotodoenconcontro.jpg seu sha etc...

8 digitei cd Ex:coral2020

9 repito 6 digitando outro nome Ex: coralic.txt

10 vou realizando esta repeticao ate o 18 nivel de profundidade de subdiretorios tendo assim sha de todos os arquivos por subdretorio.

A-) NAO sei automatizar, NAO sei fazer este script

B-)voce pode ajudar, voce pode faze-lo

c-) o que voce nao entendeu, para tentar ajudar-me

- Nomes aleatorios (contendo espaco e outros caracteres)
= tipos variados (.pdf,.txt,.jpg,.mp3, .doc, .ppt, .xls)
- Profundidades aleatorias depende do raiz


Possuo 09 diretórios no raiz, com nomes diverso (aulas de 2021, 01 Multimedia, 05 work avulso!, #00 para Arrumar,etc...)

Vamos lá, a intenção é te ajudar a fazer!
Em cada um desses 09 diretórios,
você executa:
cd diretório;
cd subdir; #para cada subdir, do diretório.....
E executa o comando abaixo:
find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A7.txt;
É isso?
------------------------------------------------------------------------
Caso positivo,
A logica é:
Em um laço:
"buscar" esses 9 diretórios.
Dentro desse laço, Outro laço:
buscar os SubDirs, nesses diretórios, e,
executar o que deseja
fechar os laços

Pode ser que tenha problema com "Espaços no nome de diretórios/Arquivos"
Fiz um "rascunho, deu 8 linhas....."
______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



9. Re: Script sha256sum criando .txt em subdiretorios

joao romeo
jrbusca

(usa Lubuntu)

Enviado em 21/10/2021 - 13:39h

Obrigado!

vamos por partes entao

11-)Nao sei fazer o laco

12-)Quais comandos eu digito para DESCER ao nivel mais profundo?

13-) Quais comandos eu digito para ir SUBINDO ate 1 nivel, como e ESTE Loop

===



10. Re: Script sha256sum criando .txt em subdiretorios

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 21/10/2021 - 16:49h

Em cada um desses 09 diretórios,
você executa:
cd diretório;
cd subdir; #para cada subdir, do diretório.....
E executa o comando abaixo:
find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A7.txt;
É isso?
----------------------------------------------------------------------------------------------------------------
Primeiro,
Responda minha pergunta.
----------------------------------------------------------------------------------------------------------------
Segundo:
Poste a saída de:
tree
---------------------------------------------------------------------------------------------------------------
Terceiro:
Estou testando aqui, conclui que é mais pratico gerar todos "sha256sum", enviar para um arquivo, e,
posteriormente, fazer a separação por diretório.
---------------------------------------------------------------------------------------------------------------



______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA, faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________



11. Re: Script sha256sum criando .txt em subdiretorios

joao romeo
jrbusca

(usa Lubuntu)

Enviado em 22/10/2021 - 05:45h

Obrigado pela ajuda!

M1-Em cada um desses 09 diretórios,
você executa:

cd diretório;
cd subdir; #para cada subdir, do diretório.....
E executa o comando abaixo:
find . -type f -print0 | xargs -0 -L1 -i sha256sum {} > A7.txt;


cd /Volume/WD/A/a1/a2/a3/a4/a5/a6/a7

Resposta: Sim por isto preciso de ajuda para automatizar a operacao, tem dir com muito arquivo, ja me perdi n vezes.

para chegar no ultimo tenho que passar por eles e saber se tem mais profundo ou nao

cd A

ls

cd a1

ls

cd a2

ls

cd a3



M2-Comando tree

Resposta terminal ficou GIGANTESCO, tive que dar ctrl+C para parar.

descrevi como sao os diretorios e os sub na primeira postagens, nomes genericos para eu me achar. Sempre fundos....


M3-um so arquivo?? se der problema(uma falha no hd), nao terei como descobrir nada, mas vamos tentar, obrigado...




12. Re: Script sha256sum criando .txt em subdiretorios

zacar
zacapaca

(usa Outra)

Enviado em 22/10/2021 - 08:56h

Olá,

Eu utilizo um sistema parecido com o que vc está tentando desenvolver, então vou da rumas dicas.

Supondo que você queira tirar a soma de checagem para toda árvore de diretório, vai ficar mais fácil. Acho que é este o seu caso, no post inicial você postou um exemplo com "/Volume/WD/A", então estou imaginando que seja o diretório mais alto e que você queira checar *todos* os arquivos que ele contém. Basta rodar o comando no diretório mais alto e gerar um único arquivo com todas as somas e nomes dos arquivos!

Então, como você já sabe usar o find, e entende a opção do uso do nulo como delimitador, então não vou me estender nisso.. Mas vou propor uma sintaxe um pouco diferente, pois não é necessário usar algumas outras opções do xargs para melhorarmos a velocidade..

Você está usando o sha256sum. Há alguma razão específica para isso ou você precisa de uma shasum de 256 bits? No git, o Linus uso sha1sum para checar os arquivos. Sha1sum já seria o suficiente, é bem mais rápido. Mas eu vou propor o uso o pacote "cksum" ou "sum", que são mais antigos e muito mais rápidos.

Compare as saídas:
# cksum
1990027854 1870 listaMa.txt
282246572 116302 log.txt
3535307299 4066 ls++.conf
2417648107 242 todo.txt
2288352402 215 XTerm2021-10-21.02:20:03
2276778746 640 Xterm.log.archhost.2021.10.21.01.59.09.12278
3862682794 402 Xterm.log.archhost.2021.10.21.03.02.58.14198
3836534940 644 Xterm.log.archhost.2021.10.21.03.08.17.14481

# sah1sum
6a13f0edc6b8229d0142e6fddb647012c34a8a27 listaMa.txt
d4049597c61f3621b35dd647f82756318e59c792 log.txt
c4a26b2fcac059073641bf52306e57521f66fcb7 ls++.conf
49e97bcaa9014c5d4020b95ebdc9599930ff279e todo.txt
4204dceb9c62031eba0822d1081970c7f3bfc205 XTerm2021-10-21.02:20:03
ade735bea75059c980af22a521128c9e481ff0e9 Xterm.log.archhost.2021.10.21.01.59.09.12278
541f040a549aa04243d81bb5926fc806bd4071b5 Xterm.log.archhost.2021.10.21.03.02.58.14198
d36ece9c3d970553df3580fa5981f40087cedc49 Xterm.log.archhost.2021.10.21.03.08.17.14481


A saída do "cksum" é muito boa por que além de um número fácil de ler (a soma de checagem, primeiro campo), o segundo campo tem a informação de quantos cilindros o arquivo tem, ou seja, o tamanho em bytes... E no terceiro campo, o nome do arquivo.

Proporia algo assim:
$ cd "/Volume/WD/A"
$ find . -type f -print0 | xargs -0 cksum > cksum.txt


Depois que tiver vários arquivos com as somas de checagem da árvore de diretório, basta compará-los com "diff", "vimdiff", ou o "meld" (GUI)..
Ou até o grep, para pegar os arquivos que diferem entre um arquivo de checagem e o outro (por exemplo, "cksum1.txt" e "cksum2.txt"):

$ grep -v -f cksum1.txt  cksum2.txt |  awk '{print $3}' 


A opção -v do grep só imprime as linhas de "cksum2.txt" que são diferentes do arquivo "cksum1.txt". A opção "-f [ARQUIVO]" serve para o grep usar cada linha do arquivo "cksum1.txt" como um padrão de busca em "cksum2.txt"...
O awk vai imprimir somente o terceiro campo, que é o nome dos arquivos que diferem.. Se houver espaços em branco nos nomes dos arquivos, pode tentar algo como: awk '{for(i=3;i<=NF;++i)print $i}'





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts