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: 2.077 ]
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
Verificar conexão com Internet
Ajudem a melhorar este script IPTABLES
Nenhum comentário foi encontrado.
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Utilizando a Ferramenta xcheckrestart no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Abrir um arquivo URL pelo Clipper (9)
Seno, Coseno, Tangente em CLIPPER (1)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









