Altera parte do nome do arquivo em vários arquivos em um diretório:

2

Eu já tive um script que faria o seguinte. Renomearia parte de um nome de arquivo de vários arquivos no diretório atual:

Por exemplo:

rename variable1 variable2

rename 456 555

Entrada:

testa456testa
sama456sama
apple456applea
johna_456_johna
davida_456_davidb

Saída:

testa555testa
sama555sama
apple555applea
johna_555_johna
davida_555_davidb

Eu não tenho mais o script e ainda sou novo no Unix. Eu preciso de um script, que eu possa usar a partir da linha de comando.

O que eu faço agora é:

Eu listo os arquivos "ls * (nomes de arquivo)" em um nome de arquivo temporário. Então eu faço uma pesquisa% / s / 456/555 / g. Em seguida, movo todos os nomes de arquivos antigos para novos nomes de arquivos. Consegui fazer isso em uma linha de comando "renomear $ 1 a $ 2". Então, em qualquer diretório eu colocaria para renomear o meio dos nomes dos arquivos a partir de uma linha de comando. Pode ser centenas de arquivos. Espero que isso faça sentido, graças Ivan

    
por ivan 12.10.2016 / 23:06

4 respostas

0

Parece que você está esquecendo de passar os arquivos para rename .

rename 456 555 *456*
    
por 12.10.2016 / 23:20
0

Com apenas shell, usando a expansão de parâmetros:

for f in *456*; do echo mv -i -- "$f" "${f//456/555}"; done

aqui estamos revisando os arquivos com 456 em seus nomes, e o padrão de expansão de parâmetro ${f//456/555} substituirá todos os 456 substrings no nome do arquivo por 555 .

Os itens acima farão o teste de execução mostrando o comando mv , você pode remover echo para permitir que a ação ocorra:

for f in *456*; do mv -i -- "$f" "${f//456/555}"; done

com rename ( prename ):

rename -n 's/456/555/g' *456*

isso substituirá todos ( g ) 456 substring de nomes de arquivos por 555 ( s/456/555/ ).

-n fará o teste de execução, se você estiver satisfeito com as alterações a serem feitas, remova -n para permitir a renomeação real:

rename 's/456/555/g' *456*
    
por 12.10.2016 / 23:21
0
which -a rename

Indica se alguma ferramenta de renomeação está no seu $ PATH.

rename 's/456/555/g' *

É a sintaxe preferida para fazer o que você quer (conforme indicado no manual ). Se você não tem uma versão antiga ou de renomear sem regex, apenas faça o download (official ) nome_do_promo Que é um script perl como os sistemas usam.

    
por 12.10.2016 / 23:23
0

(movido de um pergunta pretendida como uma resposta aqui)

Encontrei a resposta para minha pergunta:

#! /bin/csh -f
#----------------------------------------------------------------------
#  Script Name: moveme                          Date:   05/07/96
#  Written by:  John W. Woolsey                 Rev:    10/11/99
#
#  Description:
#    Renames a set of files that contain a particular search string
#    to file names that contain a replacement string.
#
#  Syntax:  moveme <search_string> <replace_string>
#
#  Where:
#     <search_string> is the name of the file name search string.
#     <replace_string> is the name of the file name replace string.
#----------------------------------------------------------------------
#
onintr catch
if ($#argv != 2) goto syntax

ls -d *$1* | sed "s/\(.*\)\\(.*\)/mv & $2/" | sh
exit 0

syntax:
echo "Syntax:  'basename $0' <search_string> <replace_string>"
exit 1

catch:
echo "'basename $0' was interrupted or terminated abnormally."
exit 1
    
por 13.04.2017 / 14:36

Tags