Deletar somente arquivos que estão em uma lista

1. Deletar somente arquivos que estão em uma lista

Guilherme
gui8920

(usa CentOS)

Enviado em 28/08/2013 - 02:39h

Olá galerinha!

Estou com um pequeno problema que não consegui resolver com o comando rm. Tenho um arquivo .txt cujo tem vários arquivos listados que eu tenho que os remover em uma pasta onde contém outros que desejo que fiquem lá sem serem modificados. Eis um exemplo da lista cuja tem aproximadamente 40 mil arquivos: http://img842.imageshack.us/img842/7746/o6nq.png

Queria saber se existe algum comando pra que eu delete somente os arquivos que estão nessa lista .txt.

Obrigado desde já :)


  


2. Re: Deletar somente arquivos que estão em uma lista

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/08/2013 - 07:34h

gui8920 escreveu:

Olá galerinha!

Estou com um pequeno problema que não consegui resolver com o comando rm. Tenho um arquivo .txt cujo tem vários arquivos listados que eu tenho que os remover em uma pasta onde contém outros que desejo que fiquem lá sem serem modificados. Eis um exemplo da lista cuja tem aproximadamente 40 mil arquivos: http://img842.imageshack.us/img842/7746/o6nq.png

Queria saber se existe algum comando pra que eu delete somente os arquivos que estão nessa lista .txt.

Obrigado desde já :)



#!/bin/bash

arqs=`cat /tmp/lista.txt`
dir="/diretorio/dos/arquivos"

for i in `echo $arqs`;do
find $dir -name *$i -exec rm -rf {} \;
done



3. Re: Deletar somente arquivos que estão em uma lista

Guilherme
gui8920

(usa CentOS)

Enviado em 28/08/2013 - 18:19h

amarildosertorio escreveu:

gui8920 escreveu:

Olá galerinha!

Estou com um pequeno problema que não consegui resolver com o comando rm. Tenho um arquivo .txt cujo tem vários arquivos listados que eu tenho que os remover em uma pasta onde contém outros que desejo que fiquem lá sem serem modificados. Eis um exemplo da lista cuja tem aproximadamente 40 mil arquivos: http://img842.imageshack.us/img842/7746/o6nq.png

Queria saber se existe algum comando pra que eu delete somente os arquivos que estão nessa lista .txt.

Obrigado desde já :)



#!/bin/bash

arqs=`cat /tmp/lista.txt`
dir="/diretorio/dos/arquivos"

for i in `echo $arqs`;do
find $dir -name *$i -exec rm -rf {} \;
done


Olá,

Gostaria de saber como se usa esse código. Não é só colar no terminal depois de colocar o diretório ali certinho?

Outra dúvida: rm -rf não é utilizado para deletar diretórios? pois no caso quero deletar somente os arquivos!

Obrigado pela resposta :)


4. Re: Deletar somente arquivos que estão em uma lista

Fernando
phoemur

(usa Debian)

Enviado em 28/08/2013 - 20:25h

Como a lista dele tem 40 mil arquivos, possívelmente a solução com loop for vai dar estouro de pilha devido à quantidade de entradas muito grande, de forma que o mais correto seria usar o xargs


xargs -t -L1 rm -f < lista.txt

assim funcionaria melhor, é mais simples e elegante


E se quiser usar multithreading pra fazer tudo de forma mais rápida utilizando vários processos ao mesmo tempo é só utilizar a opção -P0, porém o PC deve ter recursos de processamento suficientes


xargs -t -P0 -L1 rm -f < lista.txt



pra usar é só executar o comando que eu passei no diretorio onde estao os arquivos, substituindo o lista.txt pelo caminho da sua lista

Referência:
http://apoie.org/JulioNeves/TiraGosto.htm


5. Re: Deletar somente arquivos que estão em uma lista

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/08/2013 - 20:33h

É um script. Modifica as variáveis e testa. Se quiser testar listando antes de deletar...


# vi /usr/local/sbin/teste.sh
#!/bin/bash

arqs=`cat /tmp/lista.txt`
dir="/diretorio/dos/arquivos"

for i in `echo $arqs`;do
find $dir -name *$i -exec ls -l {} \;
done


# chmod +x /usr/local/sbin/teste.sh

# /usr/local/sbin/./teste.sh

Em relação ao rm -rf retire o "r"...


# man rm

-f, --force
ignore nonexistent files, never prompt

-r, -R, --recursive
remove directories and their contents recursively


6. Re: Deletar somente arquivos que estão em uma lista

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/08/2013 - 21:01h

phoemur escreveu:

Como a lista dele tem 40 mil arquivos, possívelmente a solução com loop for vai dar estouro de pilha devido à quantidade de entradas muito grande, de forma que o mais correto seria usar o xargs


xargs -t -L1 rm -f < lista.txt

assim funcionaria melhor, é mais simples e elegante


E se quiser usar multithreading pra fazer tudo de forma mais rápida utilizando vários processos ao mesmo tempo é só utilizar a opção -P0, porém o PC deve ter recursos de processamento suficientes


xargs -t -P0 -L1 rm -f < lista.txt



pra usar é só executar o comando que eu passei no diretorio onde estao os arquivos, substituindo o lista.txt pelo caminho da sua lista

Referência:
http://apoie.org/JulioNeves/TiraGosto.htm


Muito bom!

Vou te confessar que não utilizava o xargs. Realmente muito mais simples e elegante.


7. Re: Deletar somente arquivos que estão em uma lista

Fernando
phoemur

(usa Debian)

Enviado em 28/08/2013 - 21:18h

O xargs é um comando muito poderoso, porém difícil pro iniciante entender como usar... Eu demorei alguns meses pra dominar, mas também pudera, não sou profissional da área de TI...

Essa opção de multithreading é fenomenal, eu uso bastante quando preciso converter fotos, vídeos ou música em massa, pois executar vários processos encurta bastante o tempo de execução...

-P1 um processo
-P2 dois processos simultaneos
(...)
-P0 deixa a criterio do xargs quantos processos ele vai utilizar, ele vai tentar usar o maximo possivel...

Funciona mais ou menos como usar na compilação
make -j2
e ele compilaria usando 2 processos, ou seja, mais rápido


8. Re: Deletar somente arquivos que estão em uma lista

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/08/2013 - 21:28h

phoemur escreveu:

O xargs é um comando muito poderoso, porém difícil pro iniciante entender como usar... Eu demorei alguns meses pra dominar, mas também pudera, não sou profissional da área de TI...

Essa opção de multithreading é fenomenal, eu uso bastante quando preciso converter fotos, vídeos ou música em massa, pois executar vários processos encurta bastante o tempo de execução...

-P1 um processo
-P2 dois processos simultaneos
(...)
-P0 deixa a criterio do xargs quantos processos ele vai utilizar, ele vai tentar usar o maximo possivel...

Funciona mais ou menos como usar na compilação
make -j2
e ele compilaria usando 2 processos, ou seja, mais rápido


Show!

Pra mim já valeu como melhor resposta!

Abraço!


9. Re: Deletar somente arquivos que estão em uma lista

Guilherme
gui8920

(usa CentOS)

Enviado em 01/09/2013 - 07:29h

Desculpem a demora na reposta, estava com alguns probleminhas na internet!

amarildosertorio escreveu:

É um script. Modifica as variáveis e testa. Se quiser testar listando antes de deletar...


# vi /usr/local/sbin/teste.sh
#!/bin/bash

arqs=`cat /tmp/lista.txt`
dir="/diretorio/dos/arquivos"

for i in `echo $arqs`;do
find $dir -name *$i -exec ls -l {} \;
done


# chmod +x /usr/local/sbin/teste.sh

# /usr/local/sbin/./teste.sh

Em relação ao rm -rf retire o "r"...


# man rm

-f, --force
ignore nonexistent files, never prompt

-r, -R, --recursive
remove directories and their contents recursively


O console me retornou uma mensagem tipo "/etc/bash not found" :/

phoemur escreveu:

Como a lista dele tem 40 mil arquivos, possívelmente a solução com loop for vai dar estouro de pilha devido à quantidade de entradas muito grande, de forma que o mais correto seria usar o xargs


xargs -t -L1 rm -f < lista.txt

assim funcionaria melhor, é mais simples e elegante


E se quiser usar multithreading pra fazer tudo de forma mais rápida utilizando vários processos ao mesmo tempo é só utilizar a opção -P0, porém o PC deve ter recursos de processamento suficientes


xargs -t -P0 -L1 rm -f < lista.txt



pra usar é só executar o comando que eu passei no diretorio onde estao os arquivos, substituindo o lista.txt pelo caminho da sua lista

Referência:
http://apoie.org/JulioNeves/TiraGosto.htm


Este deu certo :D o unico problema foi que nao consegui com a lista toda. Enfim, tenho que testar, espero que dê com pelo menos 10 mil arquivos pois se não fica puxado dividir tudo.

Novamente, obrigado a todos que responderam :D







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts