Script com muitas utilidades para arquivos e pastas

De uns meses para cá comecei a ter algumas dificuldades em manter todos os meus arquivos organizados. Desde que comecei a tirar fotos digitais eu armazeno todas, organizadas por eventos, assim como meus vídeos e demais arquivos pessoais. Sem contar que também tenho uma imensa quantidade de músicas organizadas por bandas, apresentações separadas por tipo, filmes por gênero, documentos etc.

[ Hits: 33.596 ]

Por: Alexandre Gonçalves Monteiro da Silva em 10/03/2010 | Blog: https://www.vivaolinux.com.br/~alexandre_gms


Explicação inicial



Ao passar dos anos vi que meus arquivos estavam virando uma bagunça em alguns quesitos, por exemplo: nome das fotos estarem separadas com espaços e sem organização de nome, músicas com o nome das pastas em minúsculo e as respectivas musicas em maiúsculas etc. Às vezes pensava em renomear apenas os *.jpg de uma pasta, mas não os *.mpeg *.avi, e por aí vai...

Resolvi desenvolver um script que fosse atender todas essas minhas necessidades de uma forma gráfica amigável. Percebi que muita gente tem a necessidade de fazer essas organizações em seus arquivos, porém a falta de um recurso faz com que todos deixem a bagunça crescer gradativamente.

Esse script tem as seguintes funções:
  1. Transformar pastas em maiúsculas
  2. Transformar pastas em minúsculas
  3. Transformar arquivos em maiúsculos
  4. Transformar arquivos em minúsculos
  5. Retirar espaço das pastas
  6. Renomear

Para ter uma interface amigável eu resolvi utilizar o Xdialog. Algumas distros já tem o Xdialog por default, porém para a maioria é necessário fazer a instalação.

Para instalar digite no terminal:

# apt-get install xdialog

Obs.: este script não roda sem a instalação do Xdialog.

Opções do script

Bom, como vocês viram no tópico anterior, ele tem 6 utilidades.

Vamos a primeira:

1) Transformar pastas em maiúsculas:

Aqui basta você escolher, na tela gráfica, o nome da pasta onde todos os diretórios nela incluídos se tornarão maiúsculos. Este script irá trabalhar somente no diretório corrente, pois se fosse trabalhar juntamente com subdiretórios iria aumentar a confusão dos arquivos.

Note que o caminho em que estão seus arquivos/diretórios estão escritos ao lado do campo "Seleção" na parte inferior da janela. Este caminho é muito importante, procure estar atento, pois se você escolher errado poderá alterar os arquivos/pastas que não desejou e depois será complicado voltar atrás.

2) Transformar pastas em minúsculas:

O mesmo que o passo acima, porém o nome das pastas serão transformados em letras minúsculas.

3) Transformar arquivos em maiúsculos:

Neste passo você deve selecionar a pasta que deseja transformar o nome dos arquivos em letras maiúsculas. Isso vale somente para arquivos do diretório corrente e não os subdiretórios.

Lembre-se que o campo "Seleção" na parte inferior da janela é onde registra o local que você definiu. Repito pelo fato de haver confusão em alguns casos. Você deve clicar em cima do diretório e conferir se ele apareceu neste campo.

4) Transformar arquivos em minúsculos:

O mesmo que o passo acima, porém o nome dos arquivos serão transformados em letras minúsculas.

5) Retirar espaço dos arquivos e pastas:

Esta opção faz com que o(s) espaço(s) de todos os arquivos e pastas do diretório corrente sejam substituídos por "_" , Exemplo: "foto da festa.jpg" transformará para "foto_da_festa.jpg"; "GUNS AND ROSES/" moverá para "GUNS_AND_ROSES/" etc.

6) Renomear:

Esta á e opção mais desejada para a organização de nossos arquivos!

Bom, eu tiro muitas fotos de aniversários, viagens, baladas. Geralmente as fotos destes eventos são tiradas por mais de uma pessoa. Quando você for juntar todas as fotos em uma pasta qual a surpresa que você tem? Argh.."quantos nomes diferentes...DCS_20100102.jpg, foto_652.jpg, IMG_20080911.jpg", "em que ordem essas fotos foram tiradas?", "não tem como eu deixar todas as fotos do meu aniversário com um nome só?", etc etc.

Agora pense que em seu aniversário tiveram fotos com extensão *.JPG e *.JPEG, além disso fizeram vídeos com a extensão *.avi, *.mpeg, *.mp4 e *.3gp. Sinceramente será muito trabalhoso para você organizar todos estes arquivos. A opção RENOMEAR veio para ser a nossa máquina de lavar roupa, basta digitarmos poucas e simples palavras para o script fazer todo o resto!

Inicialmente você vai selecionar a pasta em que deseja renomear seus arquivos. Na sequência aparecerá uma tela com todas as extensões contidas na pasta (*.jpg, *.avi, *.mp3 etc), você irá escolher somente uma e clicar em OK. Na tela seguinte aparecerá uma janela alertando que você não pode escolher um nome que já contenha na pasta, por exemplo: você tem a pasta "TESTE/" com os arquivos: "festa_1.jpg", "festa_2.jpg", "festa_3.jpg" etc. Você não pode colocar o mesmo nome que já existe, neste caso "festa". Escolha algo parecido como "festas", "festona". De OK e digite o novo nome na próxima janela!

Explicação concluída, agora vamos ao script no próximo passo!

    Próxima página

Páginas do artigo
   1. Explicação inicial
   2. O script
Outros artigos deste autor

Gerar músicas aleatórias com YAD (Modo Gráfico)

Leitura recomendada

Brincando com pseudoterminais e redirecionamentos

Redundância de link de internet

Executando backup do MySQL e enviando por FTP

GNU Parallel: criando atividades em paralelo com shell script

Entendendo, criando e editando pacotes Debian (.deb)

  
Comentários
[1] Comentário enviado por albfneto em 11/03/2010 - 14:39h

é bom esse script. diferente, original e bem prático.
foi para o favoritos.

[2] Comentário enviado por xerxeslins em 11/03/2010 - 16:00h

Favoritado =)

[3] Comentário enviado por rrodrigues345 em 08/07/2010 - 20:08h

Olá, achei muito bacana o seu script, porém estou usando o ubuntu 10.04 e o xdialog "não existe" nele... tem algo que eu possa fazer para utilizar outro, que nao seja o xdialog? VAleu!!

ricardo

[4] Comentário enviado por alexandregms em 16/07/2010 - 18:12h

Então, basta vc instalar o xdialog em seu Linux. Está escrito na primeira página deste artigo, basta vc digitar em seu prompt: apt-get install xdialog.
Caso ele não encontre o xdialog, atualize o seu source.list e em seguida execute 'apt-get update'.
Boa sorte!!!

[5] Comentário enviado por andersonpa em 15/09/2010 - 15:34h

Olá Alexandre,
seu script foi muito útil pra mim.

Ricardo,
também não conseguir instalar o xdialog no ubuntu 10.04, então tomei a liberdade de substituir o xdialog por zenity.

Um abraço.


#!/bin/bash

#
##### DESENVOLVIDO POR ALEXANDRE MONTEIRO: alexandregms2@gmail.com
#
## SCRIPT PARA UTILIDADES EM ARQUIVOS E/OU PASTAS
## PARA UM DESKTOP PESSOAL: TRABALHAR COM IMAGENS, MUSICAS, VÍDEOS, ETC
## PARA UM AMBIENTE CORPORATIVO: TRABALHAR COM LOGS, BACKUP's, ETC
#

#r1="/tmp/resp1.tmp"
#r2="/tmp/resp2.tmp"
#r3="/tmp/resp3.tmp"

###### PASTAS VIRAR MAIÚSCULAS ######

PASTAS_VIRAR_MAIUSCULAS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MAIÚSCULO" 10 70
resp1=$(zenity --text "SELECIONE O DIRETÓRIO EM QUE SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MAIÚSCULO" --entry --title "Informe" " ");
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type d | while read dir
do
novo_nome=`echo $dir | tr 'a-z' 'A-Z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "AS PASTAS DO DIRETÓRIO\n $resp1 \n FORAM TRANSFORMADAS EM MAIÚSCULAS" 10 70
zenity --info --text "AS PASTAS DO DIRETÓRIO\n $resp1 \nFORAM TRANSFORMADAS EM MAIÚSCULAS" --title="Operacao concluída"
fi
#rm $r1
MENU
}

##### PASTAS VIRAR MINÚSCULAS #####

PASTAS_VIRAR_MINUSCULAS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MINÚSCULO" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE SE DESEJA TRANSFORMAR TODAS AS PASTAS EM MINÚSCULO");
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type d | while read dir
do
novo_nome=`echo $dir | tr 'A-Z' 'a-z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "AS PASTAS DO DIRETÓRIO\n $resp1 \n FORAM TRANSFORMADAS EM MINÚSCULAS" 10 70
zenity --info --title "Concluido" --text="AS PASTAS DO DIRETÓRIO\n $resp1 \nFORAM TRANSFORMADAS EM MINÚSCULAS"
fi
#rm $r1
MENU
}


###### ARQUIVOS VIRAR MAIÚSCULOS ######

ARQUIVOS_VIRAR_MAIUSCULOS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR OS ARQUIVOS EM MAIÚSCULOS" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE SE DESEJA TRANSFORMAR OS ARQUIVOS EM MAIÚSCULOS");
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40]
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type f | while read dir
do
novo_nome=`echo $dir | tr 'a-z' 'A-Z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "OS ARQUIVOS DA PASTA\n $resp1 \n FORAM TRANSFORMADOS EM MAIÚSCULOS" 10 70
zenity --info --title "Concluido" --text="OS ARQUIVOS DA PASTA\n $resp1 \nFORAM TRANSFORMADOS EM MAIÚSCULOS"
fi
#rm $r1
MENU
}

##### ARQUIVOS VIRAR MINÚSCULOS #####

ARQUIVOS_VIRAR_MINUSCULOS()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR OS ARQUIVOS EM MINÚSCULOS" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE \n SE DESEJA TRANSFORMAR OS ARQUIVOS EM MINÚSCULOS");
if [ -z $resp1 ]
then
#Xdialog --msgbox "DEVE-SE ESCOLHER A PASTA" 5 40
zenity --error --title "Error" --text="DEVE-SE ESCOLHER A PASTA"
else
cd $resp1
find * -maxdepth 0 -type f | while read dir
do
novo_nome=`echo $dir | tr 'A-Z' 'a-z'`
mv "$dir" "$novo_nome" 2> /dev/null
done
#Xdialog --msgbox "OS ARQUIVOS DA PASTA\n $resp1 \n FORAM TRANSFORMADOS EM MINÚSCULOS" 10 70
zenity --info --title "Concluido" --text="OS ARQUIVOS DA PASTA\n $resp1 \nFORAM TRANSFORMADOS EM MINÚSCULOS"
fi
#rm $r1
MENU
}

##### ESPAÇO RETIRAR #####

ESPACO_RETIRAR()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE O DIRETÓRIO EM QUE OS \n ESPAÇOS DA PASTA E ARQUIVOS\n SERÃO SUBSTITUÍDOS POR '_'" 10 70
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE O DIRETÓRIO EM QUE OS \nESPAÇOS DA PASTA E ARQUIVOS\nSERÃO SUBSTITUÍDOS POR '_'");
if [ ! -z $resp1 ]
then
cd $resp1
find * -maxdepth 0 -name '*' | while read pasta
do
new_name=`echo $pasta | sed 's/ /_/g'`
mv "$pasta" "$new_name" 2> /dev/null
done
#Xdialog --msgbox "OS ESPAÇOS DO DIRETÓRIO\n $resp1 \n FORAM SUBSTITUÍDOS POR '_'" 10 70
zenity --info --title "Concluido" --text="OS ESPAÇOS DO DIRETÓRIO\n $resp1 \nFORAM SUBSTITUÍDOS POR '_'"
else
#Xdialog --msgbox "ABORTANDO O SCRIPT" 5 30
zenity --info --title "Cancelado" --text="ABORTANDO O SCRIPT"
fi
#rm $r1
MENU
}

##### RENOMEAR #####

RENOMEAR()
{
#Xdialog --msgbox "NA TELA SEGUINTE SELECIONE A PASTA ONDE ESTÃO OS ARQUIVOS" 5 65
#Xdialog --dselect ./ 30 75 2> $r1
#resp1=`cat $r1`
resp1=$(zenity --title "Informe o Diretorio" --entry --text "SELECIONE A PASTA ONDE ESTÃO OS ARQUIVOS");
extensoes=`
for file in $resp1*
do
echo ${file##*.}
done | sort | uniq`

#Xdialog --inputbox "QUAL EXTENSÃO VOCÊ DESEJA RENOMEAR?\n CONSIDERE MAIÚSCULAS E MINÚSCULAS \n\n$extensões" 20 60 2> $r2
resp2=$(zenity --title "Informe a extensão" --entry --text "QUAL EXTENSÃO VOCÊ DESEJA RENOMEAR?\n CONSIDERE MAIÚSCULAS E MINÚSCULAS \n\n$extensoes");
#resp2=`cat $r2`
#Xdialog --yesno "NA TELA SEGUINTE VOCÊ IRA DIGITAR O NOVO NOME DOS ARQUIVOS, \n POREM NÃO ESCOLHA O MESMO NOME QUE JÁ EXISTA NA PASTA,\n POIS VOCÊ PODERÁ PERDER ALGUNS ARQUIVOS. \n DESEJA CONTINUAR?" 15 70
zenity --question --text="DIGITAR O NOVO NOME DOS ARQUIVOS, PORÉM NÃO ESCOLHA O MESMO NOME QUE JÁ EXISTA NA PASTA, POIS VOCÊ PODERÁ PERDER ALGUNS ARQUIVOS.\nDESEJA CONTINUAR?"
if [ "$?" = "0" ]
then
#Xdialog --inputbox "DIGITE O NOVO NOME DOS ARQUIVOS" 10 40 2> $r3
#resp3=`cat $r3`
resp3=$(zenity --title "Informe" --entry --text "DIGITE O NOVO NOME DOS ARQUIVOS");
i=0
cd $resp1
if [ -z $resp1 ] || [ -z $resp2 ] || [ -z $resp3 ]
then
#Xdialog --msgbox "DEVE-SE DIGITAR O NOVO NOME" 5 40
zenity --error --title "Error" --text="DEVE-SE PREENCHER TODOS OS CAMPOS"
else
arquivos=`ls -trC1 *.$resp2`
for j in $arquivos
do
echo "RENOMEANDO $j PARA $resp3\_$i.$resp2"
mv $j $resp3\_$i.$resp2 2> /dev/null
i=`expr $i + 1`
done
#Xdialog --msgbox "OS ARQUIVOS COM EXTENSÃO *.$resp2 DA PASTA:\n $resp1 \n FORAM RENOMEADOS COM SUCESSO" 10 70
zenity --info --title "Concluido" --text="OS ARQUIVOS COM EXTENSÃO *.$resp2 DA PASTA:\n $resp1 \nFORAM RENOMEADOS COM SUCESSO"
fi
fi
#rm $r1 $r2 $r3
MENU
}

##### MENU #####

MENU()
{
operacao=$(zenity --entry --text "Menu\n
1. TRANSFORMAR PASTAS EM MAIÚSCULAS\n
2. TRANSFORMAR PASTAS EM MINÚSCULAS\n
3. TRANSFORMAR ARQUIVOS EM MAIÚSCULOS\n
4. TRANSFORMAR ARQUIVOS EM MINÚSCULOS\n
5. RETIRAR ESPAÇO DE ARQUIVOS E PASTAS\n
6. RENOMEAR\n
7. SAIR" --title "Menu Principal")

case $operacao in
1) PASTAS_VIRAR_MAIUSCULAS
;;
2) PASTAS_VIRAR_MINUSCULAS
;;
3) ARQUIVOS_VIRAR_MAIUSCULOS
;;
4) ARQUIVOS_VIRAR_MINUSCULOS
;;
5) ESPACO_RETIRAR
;;
6) RENOMEAR
;;
7) zenity --info --title "Exit" --text="Terminando a execução do script"

;;
*) zenity --info --title "Exit" --text="Terminando a execução do script"
;;
esac
}
MENU

[6] Comentário enviado por denaum em 07/01/2011 - 10:32h

Alexandre,

Ao trocar pelo zenity, mudou alguma coisa na sintaxe dos comandos xdialog?
abraço

[7] Comentário enviado por removido em 01/02/2011 - 16:46h

Tempos atrás usei algo parecido, mas por linha de comando, que acho menos traumatico (xdialog, zenity vai instalar e não instala)
E tinha um comando que trocava (na verdade eu mudei um que achei na net) hifen por espaço ou underscore por espaço, mas não lembro onde está esse script...

Algué saberia como?

[8] Comentário enviado por alexandregms em 12/12/2011 - 18:36h

Pessoal, a interface gráfica para os scripts é algo que ainda não está muito padronizado nas distribuições (temos o dialog, Xdialog, zenity, Yad, etc). Também tive problemas para instalar o Xdialog no Ubuntu, em último caso, numa urgência vcs podem rodar direto pela linha de comando.
Pensei em fazer o mesmo script utilizando o YAD, do qual achei muito mais prático para instalar, mas estou com outras prioridades! Quem sabe ele sai do forno!
Abraços

[9] Comentário enviado por genlicos em 23/01/2016 - 16:36h

Boa tarde a todos;

Adorei o script e irá servir muito pra mim...
No entanto, fiz tudo conforme explicado e quando eu executo, tanto a forma disponível em download quanto a disponível nesse fórum, gera o seguinte erro:

$ ./utilidades_shell.sh
./utilidades_shell.sh: linha 179: Xdialog: comando não encontrado
./utilidades_shell.sh: linha 195: Xdialog: comando não encontrado

Utilizo o Linux Mint 17.3
Alguém pode dá uma luz?

[10] Comentário enviado por samfr em 12/07/2016 - 06:42h

@genlicos

Eu acho que esse ano xdialog ja esta obsoleto.

"apt install xdialog
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package xdialog is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source"

[11] Comentário enviado por removido em 26/04/2017 - 13:58h


# Mudar as letras MAIÚSCULAS para minúsculas dentro dos arquivos.

Simples e objetivo é esse comando:

cat teste.txt | tr [A-Z] [a-z] > teste2.txt



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts