cg_ext - script para alteração de extensão de arquivos em larga escala
Publicado por Tairan Andreo (última atualização em 28/02/2019)
[ Hits: 1.907 ]
Script simples para realizar a troca de extensão de vários arquivos em um diretório. O programa está estável (pelos testes que realizei), mas aceito qualquer dica para a melhora do código ou para acrescentar novas funcionalidades.
Por padrão o script altera somente a extensão dos arquivos na pasta raiz informada e não nos seus subdiretórios. Caso necessário que a alteração também seja realizada para os subdiretórios (recursividade), a opção "-r" pode ser utilizada. Também existe a possibilidade de definir com mais precisão a profundidade máxima em relação ao nível que o script será aplicado nos diretórios. Essa funcionalidade é definida com a opção -maxdepth NUM, onde NUM deve ser um número inteiro não negativo.
Escrevi o script com meu inglês macarrônico mais como treino do que qualquer coisa, então se sentirem a necessidade posso alterar os comentários e a página de ajuda e deixar tudo em português.
Qualquer dúvida só chamar.
#!/bin/bash
#
# cg_ext.sh
# Author: Tairan Andreo
# Git: github.com/taandreo/
#
# This program is a script to change the file extension on a large scale.
#
# Version 1.0: Added support for options -V | --version and -h --help.
# Version 2.0: Added support for option -v | --verbose.
# Version 3.0: Added support for -i and -o options.
# Version 4.0: Added support for -r and -maxdepth options.
NAME=$(basename "$0") # Program name
# Flags:
VERBOSE=0
MAX_DEPTH=1
RECURSIVE=0
HELP="Usage: $NAME [OPTIONS] -i .ext -o .ext2 DIRECTORY
OPTIONS:
-i Original extension.
-o Final extension.
-h, --help Print this help summary page.
-V, --version Print the version.
-v Enable Verbose.
-maxdepth Define de max depth.
-r Enable recursive mode.
EXAMPLES:
$NAME -i .txt -o .csv . Change the extension .txt to .csv for all files in this directory.
$NAME -i .txt -o .csv . -v Change the extension .txt to .csv all files in this directory and show each altered file.
$NAME -i .txt -o .csv /home/user -r Change the extension .txt to .csv for all files starting in /home/user and each subdirectory.
"
is_ext(){
# Create a regex which only matches
regex='^\.[[:alnum:]][.[:alnum:]]*'
if !([[ "$1" =~ $regex ]])
then
echo "Invalid Argument: \"$1\"."
echo "The argument must be a filename extension."
exit 1
fi
}
test_options(){
if !(test -n "$1")
then
echo "-i option required."
fi
if !(test -n "$2")
then
echo "-o option required."
fi
if !(test -n "$3")
then
echo "Missing directory operand."
fi
if !(test -n "$1" & test -n "$2" & test -n "$3")
then
exit 1
fi
}
if !(test -n "$1")
then
echo "$HELP"
exit 0
fi
while test -n "$1"
do
case "$1" in
-h | --help)
echo "$HELP"
exit 0
;;
-V | --version)
echo -n $NAME
egrep '^# Version' "$0" | tail -1 | cut -d : -f 1 | tr -d \# # Extract the version from the reader
exit 0
;;
-v)
VERBOSE=1
;;
-i)
shift
is_ext "$1" # Checks if the passed argument is a filename extension.
INPUT_EXT=$1
;;
-o)
shift
is_ext "$1" # Checks if the passed argument is a filename extension.
OUTPUT_EXT=$1
;;
-maxdepth)
shift
MAX_DEPTH=$1
;;
-r)
RECURSIVE=1
;;
*)
if test -d "$1"
then
DIRECTORY="$1"
else
echo "Invalid option: $1"
exit 1
fi
;;
esac
shift
done
test_options $INPUT_EXT $OUTPUT_EXT $DIRECTORY
if test $RECURSIVE = 1
then
find $DIRECTORY -regex "^.*\\$INPUT_EXT\$" > cache_find
else
find $DIRECTORY -maxdepth $MAX_DEPTH -regex "^.*\\$INPUT_EXT\$" > cache_find
fi
while read f
do
if test $VERBOSE = 1
then
echo $f
fi
mv -- "$f" "${f%$INPUT_EXT}$OUTPUT_EXT"
done < cache_find
rm -f cache_find
Administração de VirtualBox com ShellScript
Verifica Falha Humana de Segurança em e-mail (usada por SPAMERS)
Script para bloqueio MSN/SITE por horário/usuário
Script para Ler código de barras serial e jogar no buffer do teclado
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Programa fora de escala na tela do pc (8)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)
O programa assinador digital (1)









