filtrar só as pastas onde tem arquivo [RESOLVIDO]

1. filtrar só as pastas onde tem arquivo [RESOLVIDO]

Morpheus
Minions

(usa Nenhuma)

Enviado em 28/04/2024 - 01:16h

Pegar só o caminho completo das pastas para depois usar o comando mkdir -p.

Ex: Com base no arquivo cnijlgnomn3 criaríamos a pasta /usr/bin/ com o comando mkdir -p

laço para ler o arquivo.txt

mkdir -p /tmp/teste/usr/bin






  


2. MELHOR RESPOSTA

aguamole
aguamole

(usa KUbuntu)

Enviado em 29/04/2024 - 19:08h

Aqui esta @Minions, eu escreve o script mas os comentários do script eu coloquei o chatGPT para fazer.
#!/bin/bash

# Define o comportamento de erro "unbound variable" para terminar o script imediatamente se uma variável não definida for utilizada.
set -u

# Inicia um loop while que vai ler cada linha do arquivo "lista-depastas.txt"
while read lista
do
# Usa o comando sed para remover a última parte do caminho em cada linha do arquivo
# e adiciona o resultado ao array "pastas"
pastas+=($(sed "s,[^/]*$,," <<<"${lista}"))
done <./lista-depastas.txt

# Loop for para percorrer cada elemento do array "pastas"
for cada_linha in "${pastas[@]}"
do
# Cria cada pasta no array "pastas" usando mkdir -p, o "-p" garante que os diretórios pais sejam criados, se necessário.
mkdir -p "${cada_linha}"
done

Como você pode ver ela comento muito mau e escreveu frases muito grande, mas vai ficar assim.

Testado e funcionando, se fizer com cat fica mais curto, só que o shell Bash é capas de ler arquivos sem precisar chamar o cat, então eu fiz a tarefa que seria do cat usando built-in do Bash.

3. Re: filtrar só as pastas onde tem arquivo [RESOLVIDO]

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 28/04/2024 - 01:16h

Para listar apenas os diretórios que contêm arquivos, você pode usar o seguinte comando:

```bash
find /caminho/do/diretorio -mindepth 1 -type d -exec sh -c 'find "$0" -type f -print -quit' {} \;
```

Em seguida, para pegar apenas o caminho completo dos diretórios listados para usar com o comando mkdir -p, você pode fazer o seguinte:

```bash
find /caminho/do/diretorio -mindepth 1 -type d -exec sh -c 'find "$0" -type f -print -quit' {} \; | xargs dirname
```

Esse comando irá listar apenas os diretórios que contêm arquivos e em seguida pegar o caminho completo desses diretórios para uso com o comando mkdir -p. Espero que isso te ajude!


4. Re: filtrar só as pastas onde tem arquivo [RESOLVIDO]

Morpheus
Minions

(usa Nenhuma)

Enviado em 30/04/2024 - 00:10h


aguamole escreveu:

Aqui esta @Minions, eu escreve o script mas os comentários do script eu coloquei o chatGPT para fazer.
#!/bin/bash

# Define o comportamento de erro "unbound variable" para terminar o script imediatamente se uma variável não definida for utilizada.
set -u

# Inicia um loop while que vai ler cada linha do arquivo "lista-depastas.txt"
while read lista
do
# Usa o comando sed para remover a última parte do caminho em cada linha do arquivo
# e adiciona o resultado ao array "pastas"
pastas+=($(sed "s,[^/]*$,," <<<"${lista}"))
done <./lista-depastas.txt

# Loop for para percorrer cada elemento do array "pastas"
for cada_linha in "${pastas[@]}"
do
# Cria cada pasta no array "pastas" usando mkdir -p, o "-p" garante que os diretórios pais sejam criados, se necessário.
mkdir -p "${cada_linha}"
done

Como você pode ver ela comento muito mau e escreveu frases muito grande, mas vai ficar assim.

Testado e funcionando, se fizer com cat fica mais curto, só que o shell Bash é capas de ler arquivos sem precisar chamar o cat, então eu fiz a tarefa que seria do cat usando built-in do Bash.



Na leitura de cada linha do arquivo lista-depastas.txt não deveria ter algo no loop while ou no for para identifica se a "variável no momento atual" é uma pasta ou um arquivo?

Pode ocorre o problema de criar uma pasta com o nome de um arquivo.

Infelizmente aqui no Debian 6.0.1 32 bit não tem o comando que gera um pacote já instalado.





5. Re: filtrar só as pastas onde tem arquivo

aguamole
aguamole

(usa KUbuntu)

Enviado em 30/04/2024 - 00:26h

Não, não vai acontecer de criar uma pasta com o nome de um arquivo a menos que o caminho do diretório não esteja definido.
Mas como vc pego a lista de diretórios do arquivo control do pacote DEBIAN então não tem problema porque o arquivo control armazena o caminho completo.

Mas se acontecer de receber do arquivo pastas sem o caminho completo isso vai dar uma variável vazia então o mkdir vai dar um erro "mkdir: cannot create directory ‘’: No such file or directory" e o diretório vazio não será criado.

Não, engano meu não precisa ser completo, mas se tiver um caminho como por exemplo "este/teste" o "este" é um caminho então a pasta "este/" será criada no diretório atual.


6. Re: filtrar só as pastas onde tem arquivo [RESOLVIDO]

Statiko
Statiko

(usa openSUSE)

Enviado em 30/04/2024 - 02:15h


Agora, converto regularmente arquivos para frente e para trás, se necessário. De fato, isso é muito importante e muitas pessoas simplesmente não sabem como fazer isso sem perder a qualidade. Encontrei o site https://pdfguru.com/pt/split-pdf e espero que você também ache a ajuda dele muito útil. Boa sorte e compartilhe seus sucessos.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts