Busca e move arquivos renomeando-os conforme a máscara
Publicado por Marcio Gil (última atualização em 15/09/2010)
[ Hits: 8.145 ]
Download 1283889791.rename (versão 2)
Busca e move arquivos renomeando-os conforme a máscara
Uso:
rename [opções] [caminho1/]máscara1 [caminho2/]máscara2
rename [opções] --sed 'expr' [caminho/]máscara
Opções:
--test Não move/renomeia, apenas mostra o que será feito
--cmd mv Determina o comando para mover/renomear e zera as opções
--sed exp Determina uma expressão "sed" no lugar de "máscara2"
--recursive,
-R,-r Buscar arquivos no diretório e subdiretórios de origem
-* Outras opções são repassadas ao comando "mv" (-vb implícito)
Exemplos:
rename \*.*~ \*.bak
rename '*.*~' '*.bak'
rename "*.*~" "*.bak"
rename --sed 's/\..*~$/.bak/' \*.*~
Versão 2 - Enviado por Marcio Gil em 07/09/2010
Changelog: - Sistema de contrução de expressão mehorado
- Agora suporta os coringas *, ? e [...] na máscara de origem
- e os coringas *, ? e #n na máscara de destino
- Regras mais claras para a correspondência das máscaras
- Opção -icase para ignorar maiúsculas ou minúsculas no nome dos arquivos
#!/bin/bash # # rename: Busca e move arquivos renomeando-os conforme a máscara # Criado por: Marcio Gil Maldonado # cmd=`basename $0` if [ "$1" == "--help" ] ; then echo "Busca e move arquivos renomeando-os conforme a máscara" echo echo "Uso:" echo " $cmd [opções] [caminho1/]máscara1 [caminho2/]máscara2" echo " $cmd [opções] --sed 'expr' [caminho/]máscara" echo echo "Opções:" echo " --test Não move/renomeia, apenas mostra o que será feito" echo " --cmd mv Determina o comando para mover/renomear e zera as opções" echo " --sed exp Determina uma expressão \"sed\" no lugar de \"máscara2\"" echo " --recursive," echo " -R,-r Buscar arquivos no diretório e subdiretórios de origem" echo " -* Outras opções são repassadas ao comando \"mv\" (-vb implícito)" echo echo "Exemplos:" echo " $cmd \\*.*~ \\*.bak" echo " $cmd '*.*~' '*.bak'" echo " $cmd \"*.*~\" \"*.bak\"" echo " $cmd --sed 's/\..*~$/.bak/' \\*.*~" echo exit 0 fi # Tratamento dos parâmetros istest="0" mvcmd="mv" mvopt="-vb" maxdepth_o="-maxdepth" maxdepth_n="1" sedexpr="" oldname="" newname="" while [ $# -gt 0 ] ; do case "$1" in --test) istest="1" ;; --cmd) mvcmd="$2" ; mvopt="" ; shift ;; --sed) sedexpr="$2" ; shift ;; --recursive|-R|-r) maxdepth_o="" ; maxdepth_n="" ;; -*) mvopt="$mvopt $1" ;; *) if [ -z "$oldname" ] ; then oldname="$1" elif [ -z "$newname" -a -z "$sedexpr" ] ; then newname="$1" else echo "$cmd: Excesso de parâmetros: $1" >&2 echo "$cmd: Execute '$cmd --help' para mais informações." >&2 exit 1 fi esac shift done if [ -z "$oldname" ] ; then echo "$cmd: Máscara de origem não informado" >&2 echo "$cmd: Execute '$cmd --help' para mais informações." >&2 exit 1 fi if [ -z "$newname" -a -z "$sedexpr" ] ; then echo "$cmd: Máscara de destino não informado" >&2 echo "$cmd: Execute '$cmd --help' para mais informações." >&2 exit 1 fi patt=`basename "$oldname"` if [ "$oldname" == "$patt" ] ; then mvdir="." else mvdir=`dirname "$oldname"` oldname="$patt" fi patt=`basename "$newname"` if [ "$newname" == "$patt" ] ; then mvdst="$mvdir" else mvdst=`dirname "$newname"` newname="$patt" fi # Montagem da expressão 'sed' if [ -z "$sedexpr" ] ; then oldpatt=`echo -n "$oldname" | sed -e 's/[^*?]*\([*?]\?\)[^*?]*/\1/g'` newpatt=`echo -n "$newname" | sed -e 's/[^*?]*\([*?]\?\)[^*?]*/\1/g'` if [ "$newpatt" != "$oldpatt" ] ; then op=`echo -n "$oldpatt" | wc -m` np=`echo -n "$newpatt" | wc -m` if (( $op < $np || $np == 0 )) ; then echo "$cmd: As máscaras de origem e destino são incompatíveis" >&2 echo "$cmd: Execute '$cmd --help' para mais informações." >&2 exit 1 fi fi oldpatt=`echo -n "$oldname" | sed -e 's/[.]/\\\\./g;s#/#\\\\/#g' \ -e 's/[*]/\\\\(.*\\\\)/g;s/\([?]\)/\\\\(.\\\\)/g'` newpatt=`echo -n "$newname" | sed -e 's/[.]/\\./g;s#/#\\/#g'` np="1" while : ; do patt=`echo -n "$newpatt" | sed -e "s/[*?]/\\\\\\\\$np/"` if [ "$newpatt" == "$patt" ] ; then break fi newpatt="$patt" np=$(( $np + 1 )) done sedexpr="s/$oldpatt/$newpatt/" fi # Efetua/exibe as operações if (( $istest )) ; then echo find "\"$mvdir\"" $maxdepth_o $maxdepth_n -name "\"$oldname\"" fi IFS=$'\n' for f in `find "$mvdir" $maxdepth_o $maxdepth_n -name "$oldname"` ; do g=`echo -n "$f" | sed "s#^$mvdir##" | sed "$sedexpr"` if (( $istest )) ; then echo "$mvcmd" $mvopt "\"$f\"" "\"$mvdst$g\"" else "$mvcmd" $mvopt "$f" "$mvdst$g" fi done # End of rename
Ordenação de Bytes por Swap Nibble
Informação sobre partições montadas em Xdialog
Cryporange - criptografador de mensagens
ebook-cli - gerencia livros digitais entre PC e leitores ebooks
Script para instalação de um servidor web
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Pfsense inacessivel após um periodo de tempo (0)
Quais os códigos mais dificeis que vcs sabem fazer? (7)
Fiz uma pergunta no fórum mas não consigo localizar (18)
Não consigo instalar distro antiga no virtualbox nem direto no hd (9)









