Tornar uma linha em colunas [RESOLVIDO]

1. Tornar uma linha em colunas [RESOLVIDO]

Dilan Severino de Oliveira
dilan1998

(usa Debian)

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

Boa noite, estou fazendo um script para criar uma estrutura com diretórios e arquivos identicos a um sistema de arquivos ou um diretorio especifico e seus subdiretorios e arquivos, o motivo é completamente acadêmico mas estou fazendo scripts de backup e as vezes gostaria de recriar o ambiente real para um de teste para manipular os nomes de arquivos para fazer backup rsync etc.
Cheguei até aqui
[root@fedora matrix]# echo `ls -l | grep ^d | awk '{print "ls -R "$9}'| bash ` | cut -d : -f1,2 | awk -F: '{print $2}'
abrt-action-save-package-data.conf abrt.conf gpg_keys.conf plugins abrt/plugins
[root@fedora matrix]#
este comando me retorna um diretório específico e concluindo que os campos com / são subdiretórios eu gostaria de transformar esta linha em uma coluna para
excluir os que contém a / para criar arquivos com os nomes restantes e diretórios com os outros nomes
Esta linha é de um diretorio especifico mas o comando que montei retorna a imagem



  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/10/2021 - 01:25h


dilan1998 escreveu:

Boa noite, estou fazendo um script para criar uma estrutura com diretórios e arquivos identicos a um sistema de arquivos ou um diretorio especifico e seus subdiretorios e arquivos, o motivo é completamente acadêmico mas estou fazendo scripts de backup e as vezes gostaria de recriar o ambiente real para um de teste para manipular os nomes de arquivos para fazer backup rsync etc.
Cheguei até aqui
[root@fedora matrix]# echo `ls -l | grep ^d | awk '{print "ls -R "$9}'| bash ` | cut -d : -f1,2 | awk -F: '{print $2}'
abrt-action-save-package-data.conf abrt.conf gpg_keys.conf plugins abrt/plugins
[root@fedora matrix]#
este comando me retorna um diretório específico e concluindo que os campos com / são subdiretórios eu gostaria de transformar esta linha em uma coluna para
excluir os que contém a / para criar arquivos com os nomes restantes e diretórios com os outros nomes
Esta linha é de um diretorio especifico mas o comando que montei retorna a imagem


Boa noite Dilan, veja o comando:
ls -GglR /Diretório/
O conteúdo se cada diretório é separado por uma linha vazia, dessa foma,
usando o awk, tem os registros com os campos, onde:
Campo 1 é o nome do dir,
Campo 2 total NNN
A partir do campo 3, arquivos e dir_filhos ;

Exemplo AWK:
ls -GglR /dir/|awk 'BEGIN{RS="\n\n";FS="\n";} {sub(":","/",$1);print NR,NF,$1}'

______________________________________________________________________
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: Tornar uma linha em colunas [RESOLVIDO]

Dilan Severino de Oliveira
dilan1998

(usa Debian)

Enviado em 22/10/2021 - 13:15h


Opa cara, sempre dando aula de regex muito bom, estou ainda tentando entender como diferenciar arquivos de diretórios nesta estrutura de listagem!


4. Re: Tornar uma linha em colunas [RESOLVIDO]

Dilan Severino de Oliveira
dilan1998

(usa Debian)

Enviado em 22/10/2021 - 14:44h

Achei uma solução da uma olhada
for i in $(echo ` ls -l | grep ^d | awk '{print "ls -R "$9}'| bash ` | cut -d : -f1,2) ;
do echo $i;
done ;

a saída fica assim

abrt:
abrt-action-save-package-data.conf
abrt.conf
gpg_keys.conf
plugins
abrt/plugins

sabendo que o primeiro campo é o próprio diretório eu executo (text) é o nome do script
./text | tail -n +2

saindo

abrt-action-save-package-data.conf
abrt.conf
gpg_keys.conf
plugins
abrt/plugins

./text | tail -n +2 | grep -v "/"

assim fico só com arquivos
abrt-action-save-package-data.conf
abrt.conf
gpg_keys.conf
plugins

para subdiretórios
./text | tail -n +2 | grep "/"
abrt/plugins





5. Re: Tornar uma linha em colunas [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/10/2021 - 15:10h


dilan1998 escreveu:


Opa cara, sempre dando aula de regex muito bom, estou ainda tentando entender como diferenciar arquivos de diretórios nesta estrutura de listagem!


Boa tarde,
No exemplo postado anteriormente, o awk identifica dir e arquivos...
Não e necessário o pipe para o grep,
Awk faz todo o trabalho..

______________________________________________________________________
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
______________________________________________________________________



6. Re: Tornar uma linha em colunas [RESOLVIDO]

Dilan Severino de Oliveira
dilan1998

(usa Debian)

Enviado em 22/10/2021 - 15:15h

Msoliver, valew pela ajuda, infelizmente eu ainda não compreendo muito regex estou aprendendo aos poucos, vou fazer da maneira que consegui e posteriormente vou tentar fazer da maneira como vc conseguiu me entregar para estudar esta forma mais eficiente, sou muito gambiarreiro por enquanto kkkkk! Vou marcar como melhor resposta porque me entregou o melhor, infelizmente ainda não consigo trabalhar em cima disto mas agradeço pela ajuda sempre prestativa!


7. Re: Tornar uma linha em colunas [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 22/10/2021 - 16:33h

dilan1998 escreveu:

Msoliver, valew pela ajuda, infelizmente eu ainda não compreendo muito regex estou aprendendo aos poucos, vou fazer da maneira que consegui e posteriormente vou tentar fazer da maneira como vc conseguiu me entregar para estudar esta forma mais eficiente, sou muito gambiarreiro por enquanto kkkkk!
Vou marcar como melhor resposta porque me entregou o melhor, infelizmente ainda não consigo trabalhar em cima disto mas agradeço pela ajuda sempre prestativa!


Dilan, obrigado pela melhor resposta.
Complementando:
O comando:
ls -GglR /Diretorio/ > arquivos.txt
Gera uma listagem do Diretório especificado, de forma recursiva, lista arquivos e diretórios.
Com o awk, é possível identificar Arquivos e Diretórios:
awk 'BEGIN{RS="\n\n";FS="\n";} {sub(":","",$1);print "\n"$1;for(n=3;n<=NF;n++) {gsub(/^-rw.*[0-9]+ /,"Arq;",$n);gsub(/^dr.*[0-9]+ /,"Dir;",$n);print n";"$n}}' arquivos.txt
Notas:
Campo $1 é o Diretório => print "\n"$1
Campo $2, Ignorado, não interessa.
Como o Nº de campos é variável, uso um laço => ;for(n=3;n<=NF;n++) => note que inicio no nº 3, 1 e 2 são conhecidos.....
Diferenciando Arquivos e Diretórios:
Arquivos: gsub(/^-rw.*[0-9]+ /,"Arq;",$n); => Substitui o que inicia com "-rw.*[0-9]+ ", por Arq
Diretórios: gsub(/^dr.*[0-9]+ /,"Dir;",$n); => Substitui o que inicia com "dr.*[0-9]+ ", por Dir => (drqualquer caractere em qualquer quantidade, números até um espaço")
Imprime, o Diretório e o conteúdo identificado.
Caso necessário, ao invés de "printar", é possível executar um comando, usando a função system(), do awk.
---------------------------------------------------------------------------------------------------------------
Exemplo da Saída:
/web-27-08-2021
3;Arq;dados.html
4;Dir;imagens
5;Arq;index.html
6;Arq;Jquery_Json.html
7;Dir;php
8;Arq;teste_wap.html

Nos registros seguintes, tenho o conteúdo de Dir imagens e Dir php......
Comando gerado pelo awk:
BEGIN {
RS = "\n\n"
FS = "\n"
}

{
sub(":", "", $1)
print "\n" $1
for (n = 3; n <= NF; n++) {
gsub(/^-rw.*[0-9]+ /, "Arq;", $n)
gsub(/^dr.*[0-9]+ /, "Dir;", $n)
print n ";" $n
}
}

______________________________________________________________________
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
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts