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.922 ]
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
Unificando arquivos de bloqueio e liberação no squid
Instalação e configuração do celular Nokia 6670 no Ubuntu 8.10
Detalhes técnicos do processador - CPUINFO
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
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
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
VOL já não é mais como antes? (9)
É normal não gostar de KDE? (13)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









