Renomeando vários arquivos, mas apenas parte do título

Renomeando vários arquivos, mas apenas parte do título

Preciso renomear vários arquivos (cerca de 167k) e apenas parte do título de cada arquivo. De: Aaaa.bb - 2 tag tag_tag 9tag Aaaa.bb - 125 tag_tag 9tag Aaaa.bb - 3567 tag 9tag Até: Aaaa.bb - 000002 tag tag_tag 9tag Aaaa.bb - 000125 tag_tag 9tag Aaaa.bb - 003567 tag 9tag Tudo está no HDD externo Existe alguma ferramenta ou script que possa me ajudar nesta situação? Também esqueci de mencionar que ainda sou novo no Ubuntu e todas essas coisas complicadas, então vou pedir para simplificar as respostas

Responder1

Aqui está minha opinião, usando bash, awk, e mv.

Se olharmos para o nome do arquivo do ponto de vista do awk, filename é apenas uma string com campos separados por espaço, e de particular interesse é o campo $3 que deve ser preenchido com zeros. O script abaixo faz exatamente isso. Certifique-se de colocar o script e executá-lo no mesmo diretório dos arquivos que deseja renomear. Além disso, certifique-se de que seja executável comchmod 755 renamerScript.sh

Demonstração

testdir:$ ls
Aaaa.bb - 125 tag tag_tag 9tag  Aaaa.bb - 2 tag tag_tag 9tag  Aaaa.bb - 4207 tag tag_tag 9tag  BACKUP/  renamerScript.sh*

testdir:$ ./renamerScript.sh                                                                                                                          
mkdir: cannot create directory ‘BACKUP’: File exists
cp: omitting directory ‘BACKUP’
renaming Aaaa.bb - 125 tag tag_tag 9tag to Aaaa.bb - 000125 tag tag_tag 9tag 
renaming Aaaa.bb - 2 tag tag_tag 9tag to Aaaa.bb - 000002 tag tag_tag 9tag 
renaming Aaaa.bb - 4207 tag tag_tag 9tag to Aaaa.bb - 004207 tag tag_tag 9tag 

testdir:$ ls
Aaaa.bb - 000002 tag tag_tag 9tag  Aaaa.bb - 000125 tag tag_tag 9tag  Aaaa.bb - 004207 tag tag_tag 9tag  BACKUP/  renamerScript.sh*

Roteiro

#!/bin/bash
# renamerScript.sh
# Author: Serg Kolo
# Date: Oct 17, 2015
# Purpose : renaming specific files
# Written for: http://askubuntu.com/q/686794/295286

# Make sure you have backup of the files !!!
# comment/uncomment if you do want to do a backup

mkdir BACKUP
cp -t BACKUP *

# This is where the magic happens:
# If we look at filenames from the awk point of view
# "Aaaa.bb - 2 tag tag_tag 9tag" are all really 
# space-separated fields. Field #3 is the one we need to edit.
# What we can do is pad it with zeros and then chop off 6 
# characters from the end, and store that as new filename
# The rest is just doing mv command from old filename to new
# And also making sure we're operating on files , not directories
# and not renaming the script file,too

for FILENAME in * ; 
do  
 if [ -f "$FILENAME" -a "$FILENAME" != "renamerScript.sh" ]; then

   OLDFILENAME="$FILENAME"
   NEWFILENAME=$(echo "$FILENAME" | awk '{$3="00000"$3; len=(length($3)-5); $3=(substr($3,len)); print  }')
   printf "renaming $OLDFILENAME to $NEWFILENAME \n"
   mv "$OLDFILENAME" "$NEWFILENAME"
 fi
done 

Responder2

Eu recomendaria Python e usando regex. Aqui está um exemplo de um script que fiz que pode gerenciar todos os arquivos em uma pasta e subpastas.

directoryChosen = (sys.argv[1])

print directoryChosen + "   thi is inside dollartohash"
if os.path.isdir(directoryChosen):
    for n in os.listdir(directoryChosen):
        if not n.startswith('.'):

            newname =  n.replace('$', '#')
            print newname
            if newname != n:
                path = os.path.join(directoryChosen, n)
                print path + "    this is path"
                target = os.path.join(directoryChosen, newname)
                print target + "   this is target"
                os.rename(path, target)

    newdir = directoryChosen.replace('$', '#')
    print newdir
    if directoryChosen != newdir :
         os.rename(directoryChosen, newdir)

Como você pode ver, ele pega o diretório como argumento e muda um símbolo para outro símbolo. Tenho certeza que você pode modificar a peça de substituição.

Responder3

Você pode usar o comando baseado em Perl renamepara reimprimir a sequência de dígitos após espaço-hífen-espaço no formato e largura de campo desejados, por exemplo

rename -vn -- 's/ - (\d+)/sprintf " - %06d", $1/e' *

(o sinalizador -n significa 'sem operação', ou seja, ele apenas fará um teste para testar a expressão: remova-o se/quando tiver certeza de que está funcionando corretamente).

Responder4

TentarpyRenamero renomeador de arquivos em massa que renomeia arquivos usando padrões, substituições, insere ou exclui texto ou até mesmo renomeia arquivos manualmente.

Possui janela GUI com estes recursos:

  • Padrões para renomear arquivos. Pesquise e substitua para renomear arquivos. Insira e exclua caracteres em qualquer lugar do nome do arquivo. Capitalização (coloque o nome do arquivo em maiúsculas). Substituições comuns. Renomeie manualmente os arquivos selecionados. Renomeie imagens usando seus metadados. Renomeie músicas usando seus metadados.Fonte

Instalar:sudo apt-get install pyrenamer

informação relacionada