http://www.zago.eti.br/mv.txt FAQ, dicas e modelos de scripts pra renomear ou mover arquivos. Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tópicos. Veja também o FAQ: http://www.zago.eti.br/convert.txt ******************************************************** Zago http://www.zago.eti.br/menu.html FAQ e artigos sobre Linux Movendo arquivos com o mv: O comando mv é usado para mover arquivos e diretórios ou também renomeá-los. Conheça alguns parâmetros: -b cria uma cópia de segurança dos arquivos que serão sobrescritos. -i solicita confirmação antes de sobrescrever um arquivo. Veja alguns exemplos: # mv arq_orig arq_dest # mv meudir outrodir # mv linux/docs/*HOWTO ../linux/ # mv -b arq1 arq2 arq3 /meudir Como renomear todos os arquivos do diretório corrente, por exemplo, renomear todos os arquivos .txt pra .doc mv *.txt *.doc Renomeando múltiplos arquivos no Shell http://www.Dicas-L.com.br/dicas-l/20060918.php ************************************************************* rename Pra renomear arquivos tem o comando rename, no CL10 vem no pacote util-linux. rpm -qf /usr/bin/rename util-linux-2.12-61257cl man rename rename - Rename files ************************************************************* Arquivos com nomes que impedem comandos rm, cp, mv, e etc... Manipular arquivos que o nome inicia -- e outras situações que tenha no nome simbolos que voce não acha no teclado, quando a tecla tab não resolve pra completar o nome e outras situações que dificulta a digitação do nome ou não aceita o comando, tente fazer com o "mc", ou pelo ambiente gráfico com seu navegador de diretórios, por exemplo konqueror. ************************************************************* RENOMEAR ARQUIVOS > tenho o seguinte script > precisa de um modificaçãozinha.... > #!/bin/sh > if [ $# -ne 1 ]; then > echo "Uso `basename $0` num_inicial" 1>&2 > exit -1 > fi > num=`expr $1` # num=parametro1 o for nao serve muito bem para isso, ele trabalha com lista separado pode espaco. > for i in `ls *.jpg`; do > `printf "mv -i %s %08d.jpg" $i $num` > num=`expr $num + 1` > done vamos reescrever esse pedaço, ficando assim: /bin/ls -1 *.jpg | while read i; do novo_nome=$(printf "%08d.jpg" $num) mv -i $i \"$novo_nome\" num=$[ $num + 1 ] done Nao testei isso, mas deve funcionar. ************************************************************* De: 2a. Vara Federal de Caxias do Sul Para: r3dc0d3 Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Mudar nome de varios arquivos Data: 24 Jan 2003 13:42:42 -0200 Historiadores acreditam que em Sex 24 Jan 2003 00:26, r3dc0d3 escreveu: > crie um arquivo com o seguinte: > #!/bin/sh > #script para renomear arquivos de arquivo.fwt > #para sentencaxxxx.fwt, onde xxxx corresponde a um numero. > xx=0 > for nome in `/bin/ls -1 *.fwt`; do > zz=`printf "%04d" $xx` > xx=$[$xx + 1] > mv $nome sentenca$zz.jpg Aqui eu fiz uma alteracao, para a minhas situacao especifica, troquei de "jpg" para "fwt". > done > Depois de um chmod a+x arquivo_criado Curioso, criei o arquivo como usuario normal, mas vejam como ele aparece: [regis@regis textos]$ l renomeia.sh -rwxrwxrwx 1 root root 224 Jan 24 13:19 renomeia.sh* Mesmo assim, ainda como usuario normal eu consigo apaga-lo, pois esta' com todas as permissoes. > Para executar digite ./arquivo_criado Ao executar, tenho a seguinte mensagem de erro, tanto como usuario normal quanto como root: [regis@regis textos]$ ./renomeia.sh bash: ./renomeia.sh: /bin/sh: bad interpreter: Permissão negada Tentei tambem a dica do Anderson e do Marcos, que comecam com #!/bin/bash, mas o erro foi praticamente o mesmo: [regis@regis textos]$ ./renomeia bash: ./renomeia: /bin/bash: bad interpreter: Permissão negada Veja que estou executando como usuario normal, mas como root tambem acontece a mesma coisa: [root@regis textos]# ./renomeia bash: ./renomeia: /bin/sh: bad interpreter: Permissão negada A dica que funcionou foi a do Cristofer, digitando os comandos diretamente no console, sem criar o arquivo executavel. Com um detalhe: renomeou tambem os subdiretorios (nao os arquivos dos subdiretorios, e sim os proprios subdiretorios...) Mas agora fiquei encucado!!! Porque o root nao tem permissao para executar o arquivo que eu criei??? Manualmente, eu consigo renomear os arquivos, portanto, nao se trata de permissoes no diretorio. Regis ************************************************************* De: Eduardo Rocha Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Mudar nome de varios arquivos Data: 24 Jan 2003 14:12:43 -0200 Acho que essa linha resolve seu problema: i=0; for arq in `ls *.fwt`; do i=$((i + 1)); mv $arq sentenca$i.fwt; done Eduardo Rocha ************************************************************* De:  Dicas-L-Owner@unicamp.br Assunto:  [Dicas-L] Renomeando Múltiplos Arquivos Data:  Sat, 5 Mar 2005 03:28:07 -0300     Faça download gratuito do 1º capítulo do novo livro        "MAPAS MENTAIS - Enriquecendo Inteligências"             www.idph.net/loja/mapasmentais.shtml ----------------------------------------------------------              Qual será o futuro da 4Linux?                Participe e ganhe cursos.    http://www.4linux.com.br/campanhas/pesquisa_google/ ----------------------------------------------------------   Renomeando Múltiplos Arquivos   ============================= Colaboração: Otávio Penatti Já houve várias vezes em que precisei renomear vários arquivos de uma só vez e nos quais havia um certo padrão em seus nomes. Acredito que isto também já tenho ocorrido com muita gente além de mim. Os arquivos tinham, por exemplo, o texto "-www.unicamp.br-" no nome e eu queria tirar esse pedaço de texto do nome dos arquivos ou então substituí-lo por algum outro texto. Com o script abaixo foi possível fazer isso de forma simples:   #!/bin/bash     criterio=$1   antigo=$2   novo=$3     if [ $# -lt 3 ] ; then          echo "modo de usar: renomeia [criterio] [texto_a_ser_substituido] [texto_substituto]"          exit 0   fi     for arq in *$criterio*   do          mv "$arq" "$(echo $arq | sed "s/$antigo/$novo/")"   done O laço "for" varre os arquivos do diretório atual baseado em um critério. Por exemplo, se quiser renomear os arquivos JPG do diretório, basta usar "jpg" como critério. Ou, se quiser renomear os arquivos que contenham "foto-" no nome, basta usar "foto-" como critério. O parâmetro "antigo" é o texto que será substituído no nome do arquivo, como, por exemplo, "-www.unicamp.br-". O parâmetro "novo" é o texto substituto, que será colocado no lugar do texto antigo. Se for vazio, basta usar '' (aspas simples). Um detalhe importante no script são as aspas no comando:   mv "$arq" "$(echo $arq | sed "s/$antigo/$novo/")" Se as aspas não é possível renomear arquivos que contenham espaços no nome. O script usa o sed para fazer a troca dos nomes e como o sed aceita expressões regulares, fica fácil fazer substituições de texto mais complexas. Um exemplo de uso do script seria:   ./renomeia jpg foto- '' No exemplo, todos os arquivos que tenham jpg (no nome ou extensão) terão o texto "foto-" retirado do nome. Otávio Penatti (http://otavio.penatti.com) -------------------------------------------------------------------- Colabore com a Dicas-L. Publique seu comentário sobre esta mensagem em http://www.Dicas-l.com.br/dicas-l/20050305.php -------------------------------------------------------------------- As mensagens da lista Dicas-L são veiculadas diariamente para 26765 assinantes.        Todas as mensagens da Dicas-L ficam armazenadas em                http://www.Dicas-l.com.br/dicas-l/ A redistribuição desta e outras mensagens da lista Dicas-L pode ser feita livremente segundo a licença Creative Commons http://creativecommons.org/licenses/by-nc-sa/2.0/br/deed.pt -------------------------------------------------------------------- ************************************************************* De: Claudio Matsuoka Para: Angelo Merlo Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Como renomear milhares de arquivos? Data: Fri, 27 May 2005 17:40:03 -0300 (BRT) On Fri, 27 May 2005, Angelo Merlo wrote: > pessoal como eu fao pra renomear as minhas fotinhas com numeros > sequenciais? exemplo: 15000 fotos com nomes diversos e altarar para > numeros sequenciais (1, 2, 3, 4... 15000)... Usando Korn shell (deve funcionar em bash também): $ ls a b c d e f g h i j k l y $ A=1; ls | while read i; do echo mv $i $((A++)); done > mv a 1 mv b 2 mv c 3 mv d 4 mv e 5 mv f 6 mv g 7 mv h 8 mv i 9 mv j 10 mv k 11 mv l 12 mv y 13 Tire o echo quando achar que o resultado é satisfatório. De: Alejandro Flores Responder A: Alejandro Flores Para: Angelo Merlo Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Como renomear milhares de arquivos? Data: Fri, 27 May 2005 18:12:11 -0300 Olá, > olá... > pessoal como eu faço pra renomear as minhas fotinhas com numeros > sequenciais? exemplo: 15000 fotos com nomes diversos e altarar para > numeros sequenciais (1, 2, 3, 4... 15000)... Supondo que os arquivos são do mesmo tipo (jpg): export COUNT=1 for file in * do mv $file $COUNT.jpg ((COUNT++)) done -- Abraço! Alejandro Flores http://www.triforsec.com.br/ De: Cesar Grossmann Responder A: Cesar Grossmann Para: Angelo Merlo Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)Como renomear milhares de arquivos? Data: Fri, 27 May 2005 17:44:18 -0300 Em 27/05/05, Angelo Merlo escreveu: > > pessoal como eu faço pra renomear as minhas fotinhas com numeros > sequenciais? exemplo: 15000 fotos com nomes diversos e altarar para > numeros sequenciais (1, 2, 3, 4... 15000)... Acho que tem uma solução pronta no funcoeszz... http://www.aurelio.net/zz/ # Uso: zznomefoto [-n] [-i N] [-d N] [-p TXT] arquivo(s) # Ex.: zznomefoto -n * # tire o -n para renomear! # zznomefoto -n -p churrasco- *.JPG # tire o -n para renomear! # zznomefoto -n -d 4 -i 500 *.JPG # tire o -n para renomear! # ---------------------------------------------------------------------------- zznomefoto(){ zzzz -z $1 zznomefoto && return [ "$1" ] || { echo "uso: zznomefoto [-n] [-i N] [-d N] [-p TXT] fotos.jpg"; return; }; local arq cont ext nao=0 i=1 dig=3 pref='' nome=''; while [ "${1#-}" != "$1" ]; do case "$1" in -p) pref="$2"; shift 2;; -i) i=$2 ; shift 2;; -d) dig=$2 ; shift 2;; -n) nao=1; shift ;; *) break;; esac; done for arq in "$@"; do cont=$(printf "%0${dig}d" $i); ext=".${arq##*.}" nome=$pref ; [ "$nome" ] || nome=$(echo ${arq%.*} | sed 's/[0-9]\+$//') novo="$nome$cont$ext"; echo "$arq -> $novo"; i=$((i+1)) [ "$nao" != 1 ] && mv "$arq" "$novo" done } []s -- .O. Cesar A. K. Grossmann ICQ: 35659423 ..O http://www.LinuxByGrossmann.cjb.net/ OOO Quidquid Latine dictum sit, altum viditur ************************************************************* *************************************************************