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 rename
para 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