encontra todos os caracteres '&' em arquivos e pastas

0

Eu tenho um servidor Ubuntu com compartilhamento de arquivos samba. Eu quero encontrar todos os arquivos e pastas que têm '&' em seu nome, substitua por "e". Alguém pode me ajudar nessa situação? obrigado a todos vocês Eu usei o comando sudo find / -iname '*&' , mas não funcionou

    
por tina khatibi 24.01.2016 / 08:40

2 respostas

1

Recursivamente: de baixo para cima

Você provavelmente precisará fazer isso de forma recursiva, o que significa que você precisa garantir que a renomeação seja feita de baixo para cima . Se você iniciasse no nível mais alto, por exemplo, todos os arquivos e pastas abaixo seriam literalmente movidos e precisariam ser encontrados novamente, por exemplo:

/folder & co/some other folder/test & file.txt

- >

/folder and co/some other folder/test & file.txt

Aqui é onde python 'co_de% pode ajudar, para funcionar recursivamente , executado com o argumento os.walk() , para garantir que funcione de baixo para cima.

Pelo mesmo motivo, você precisa renomear os arquivos primeiro, e as pastas, e o script abaixo também:

O script

#!/usr/bin/env python3
import shutil
import os
import sys

def move(subject):
    shutil.move(os.path.join(root, subject), os.path.join(root, subject.replace("&", "and")))

for root, dirs, files in os.walk(sys.argv[1], topdown=False):
    for f in files:
        move(f)
    for d in dirs:
        move(d)  

Como usar

  1. Copie o script abaixo em um arquivo vazio, salve-o como topdown=False
  2. Execute-o com o diretório com todos os seus arquivos e pastas como argumento:

    python3 /path/to/move.py /path/to/directory
    
  3. se o caminho incluir espaços, use aspas:

    python3 /path/to/move.py '/path/to/directory'
    
por Jacob Vlijm 24.01.2016 / 10:15
0

Você pode usar find com -exec flag para chamar o comando rename para todos os arquivos encontrados.

find . -type f  -name "*&*" -exec rename 's/&/AND/' {} +                        

Aqui está uma demonstração:

DIR:/TESTDIR
skolodya@ubuntu:$ ls

DIR:/TESTDIR
skolodya@ubuntu:$ touch "tom&jerry" "jekyl&hide"

DIR:/TESTDIR
skolodya@ubuntu:$ find . -type f  -name "*&*"
./tom&jerry
./jekyl&hide

DIR:/TESTDIR
skolodya@ubuntu:$ find . -type f  -name "*&*" -exec rename 's/&/AND/' {} +                                                    

DIR:/TESTDIR
skolodya@ubuntu:$ ls
jekylANDhide  tomANDjerry
    
por Sergiy Kolodyazhnyy 24.01.2016 / 08:54