Existe uma maneira de alterar recursivamente nomes de arquivos do shell?

0

Tive que fazer um wget para obter arquivos de um site do Wordpress. Ele salvou todos os JPGs com [ random-string-text.pagespeed.blah].

Existe uma maneira de renomear recursivamente esses JPGs, retirando todo o texto após a vírgula?

    
por Brent 12.12.2017 / 19:14

2 respostas

1

Aqui está um script Python que deve fazer o que você quer:

#!/usr/bin/env python2
# -*- coding: ascii -*-
"""remove_extensions.py

Remove meta-data filename extensions added by wget.
"""

import sys
import os
import re

# Define a regular expression to match the file-extension pattern
regex = r'^(.*),random-string-text.pagespeed.blah$'

for current_path, subdirectories, files in os.walk(sys.argv[1]):
    for filename in files:
        match = re.match(regex, filename)
        if match:
            newname = match.groups()[0]
            newpath = os.path.join(current_path, newname)
            oldpath = os.path.join(current_path, filename)
            os.rename(oldpath, newpath)

Você terá que modificar um pouco as expressões regulares para corresponder aos seus padrões reais de nome de arquivo (ou atualizar sua pergunta para dizer o que eles são).

Aqui está um teste que ilustra o script em ação.

Crie alguns diretórios:

mkdir /tmp/dir1
mkdir /tmp/dir1/dir2
mkdir /tmp/dir3

Preencha-os com alguns arquivos:

touch /tmp/dir1/file{01..03}.jpg,random-string-text.pagespeed.blah
touch /tmp/dir1/dir2/file{04..06}.jpg,random-string-text.pagespeed.blah
touch /tmp/dir3/file{07..10}.jpg,random-string-text.pagespeed.blah

Verifique o que fizemos:

user@host:~$ tree /tmp

/tmp/
├── dir1
│   ├── dir2
│   │   ├── file04.jpg,random-string-text.pagespeed.blah
│   │   ├── file05.jpg,random-string-text.pagespeed.blah
│   │   └── file06.jpg,random-string-text.pagespeed.blah
│   ├── file01.jpg,random-string-text.pagespeed.blah
│   ├── file02.jpg,random-string-text.pagespeed.blah
│   └── file03.jpg,random-string-text.pagespeed.blah
└── dir3
    ├── file07.jpg,random-string-text.pagespeed.blah
    ├── file08.jpg,random-string-text.pagespeed.blah
    ├── file09.jpg,random-string-text.pagespeed.blah
    └── file10.jpg,random-string-text.pagespeed.blah

3 directories, 10 files

Agora, execute o script:

python remove_extensions.py /tmp/

E, finalmente, verifique se ele teve o efeito pretendido:

user@host:~$ tree /tmp/
/tmp/
├── dir1
│   ├── dir2
│   │   ├── file04.jpg
│   │   ├── file05.jpg
│   │   └── file06.jpg
│   ├── file01.jpg
│   ├── file02.jpg
│   └── file03.jpg
└── dir3
    ├── file07.jpg
    ├── file08.jpg
    ├── file09.jpg
    └── file10.jpg

3 directories, 10 files
    
por 12.12.2017 / 19:44
0

Se tiver certeza de que não há outra vírgula no nome do arquivo, tente algo assim:

for i in 'find . -type f' ; do mv $i $(echo $i | sed 's/\(.*\),.*//g') ; done
    
por 12.12.2017 / 23:00

Tags