Renomeando um monte de arquivos, mas apenas parte do título

0

Eu preciso renomear um monte de arquivos (cerca de 167k) e apenas parte do título em cada arquivo. De:  %código%  %código%  %código% Para:  %código%  %código%  %código% Tudo está no HDD externo Existe alguma ferramenta ou script que possa me ajudar nessa situação? Também esqueci de mencionar que eu ainda sou novo no Ubuntu e todas essas coisas complicadas, então eu vou pedir para simplificar as respostas

    
por Ceslovas 18.10.2015 / 01:10

4 respostas

1

Aqui está minha análise, 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 interesse particular é o campo $ 3 que tem que ser preenchido com zeros. O roteiro abaixo faz exatamente isso. Certifique-se de colocar o script e executá-lo no mesmo diretório que os arquivos que deseja renomear. Além disso, verifique se ele é executável com chmod 755 renamerScript.sh

Demo

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*

Script

#!/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 
    
por Sergiy Kolodyazhnyy 18.10.2015 / 03:49
1

Eu recomendaria o Python e usaria o regex. Aqui está um exemplo de um script que eu fiz que pode cnahge 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 um argumento e altera um símbolo para outro símbolo. Tenho certeza que você pode modificar a parte de substituição.

    
por Edziu Eames 18.10.2015 / 01:27
0

Você pode usar o comando rename com base em perl para reimprimir a seqüência de dígitos após o espaço-hífen de espaço no formato e na largura de campo desejados, por exemplo,

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

(o sinalizador -n significa "no op", ou seja, ele fará apenas uma execução a seco para testar a expressão: remova-a se / quando tiver certeza de que está funcionando corretamente).

    
por steeldriver 18.10.2015 / 01:50
0

Tente pyRenamer o rename de arquivo em massa que renomeia arquivos usando padrões, substituições, insira ou exclua texto, ou até mesmo renomeie arquivos manualmente.

Tem janela de GUI com estes recursos:

  • Padrões para renomear arquivos. Pesquisar & amp; substitua para renomear arquivos. Inserir e apague o caractere em qualquer lugar do nome do arquivo. Capitalização (make nome do arquivo em maiúsculas). Substituições comuns. Renomear manualmente selecionado arquivos. Renomeie imagens usando seus metadados. Renomeie a música usando seu metadados. Fonte

Instale: sudo apt-get install pyrenamer

    
por sefulgye 18.10.2015 / 03:11