+ Responder ao Tópico



  1. #1

    Padrão Script com erro ao remover.

    Como adiciono no final desse script para ele apagar todos os arquivos da lista Del.txt.

    Ja tentei de tudo, mas por conter espaços nos nomes das pastas ele simplesmente não consegue apagar os arquivos.


    Código :
    #!/bin/bash
     
    #Script para localizar e apagar arquivos em seu HD.
    #Basta configurar os parametros desejados e executar o script em um terminal como ROOT.
    #
    #Não esquento de alterarem o script, mas mantem os creditos.
    #
    #By - Robson (CooperRJ / DarkAngel)
     
    ###  CONFIGURAÇÃO DE PARAMETROS.  #######################################################################
                                                        #
      ARQUIVOS="ini jpg png gif"            #Lista de extenções a serem removidas.            #
                                                        #
      PASTA="/media/DADOS/Meus Documentos/Músicas/"    #Pasta onde vai ser realizada a busca.            #
                                                        #
      LISTA="Del.txt"                #Arquivo onde vai ficar a lista de arquivos removidos.    #
                                                        #
      I=0                        #Variavel para contador (Não mexer)            #
                                                        #
    #########################################################################################################
     
     
    ### FUNCIONAMENTO ( NÃO MEXER ) #################################
                                    #
    rm $LISTA                            #
                                    #
     clear                                #
                                     #
     echo "Procurando arquivos"                    #
                                    #
                                      #
      # -- Executando a busca e adicionando no arquivo        #
      for BUSCA in $ARQUIVOS; do                    #
      BUSCA[i]=${BUSCA}                        #
      I=$(echo ${I}+1 | bc)                        #
      echo $BUSCA "-> listando e adicionando em $LISTA"        #
                                      #
      DELETAR=$(find "$PASTA" -name "*.$BUSCA" -print >> $LISTA)    #
      echo " ------ ------ ------ ------ -----------"        #
      done                                #
                                      #
      # SAIDAS NO TERMINAL                        #
      LINHA=$( cat $LISTA| wc -l)                    #
      if test "$LINHA" = "1"; then                    #
            echo "Nenhum arquivo encontrado."            #
                                     # 
      elif test "$LINHA" = "2"; then                #
            echo "1 arquivo encontrado."                #
                                    #
       elif test "$LINHA" > "2"; then                #
            echo  "$LINHA arquivos encontrados."            #
      fi                                #
      echo                                #
                                    #
    rm $DELETAR                            #
                                    #
                                    #
    ###  FIM DO SCRIPT   ############################################

    Agradeço a atenção.

  2. #2

    Padrão

    Existem duas formas para você fazer isso:

    1) Alterar o find do DELETAR para algo mais ou menos assim:

    DELETAR=$(find "$PASTA" -name "*.$BUSCA" -print | sed -e 's/ /\\ /g' >> $LISTA)
    Isso vai escapar os espaços e transformar cada linha em um nome único de arquivo.

    2) Trocar a linha do rm, no final do arquivo, para:

    cat $LISTA | while read line; do rm "$line"; done

    Isso vai fazer com que o nome do arquivo a ser removido fique entre aspas e, portanto, considerado como um nome único.

    O primeiro eu acho que seria mais fácil e usual. Mas a opção é sua.