Converta vários arquivos de documentos dentro de suas pastas atuais

3

Eu tenho uma pasta chamada X que dentro tem muitas pastas e subpastas. Eu quero pesquisar em todas as pastas dentro do X e encontrar um tipo de documento específico. Por exemplo, xlsx e transformar cada arquivo em um arquivo xls . Nesse caso, preciso usar a opção de conversão libreoffice como libreoffice --headless --convert-to xls , mas aqui está a captura. Após a conversão, cada arquivo convertido deve estar na mesma pasta que o arquivo xlsx original.

Exemplo:

X/
 Folder 1/
 Folder 2/
         Folder 2.1/file.xlsx
 Folder 3/
 Folder 4/
         Folder 4.1/anotherFile.xlsx

Após a conversão:

X/
 Folder 1/
 Folder 2/
         Folder 2.1/file.xls
         Folder 2.1/file.xlsx
 Folder 3/
 Folder 4/
         Folder 4.1/anotherFile.xls
         Folder 4.1/anotherFile.xlsx

O novo xls * neste caso, será convertido na mesma pasta que o xlsx original. Isso será feito em todas as subpastas e em todos os xlsx encontrados.

    
por Luis Alvarado 14.05.2014 / 22:39

2 respostas

3

Aqui está um script python que faz o que você descreveu.

Por conveniência, para ser usado com outros comandos de conversão, defini o filepath+name e o destination antes de inseri-lo no comando convert. Isso também facilita a alteração do destino para algo diferente do diretório atual do arquivo (se, por algum motivo, você precisar disso).

nota: Em alguns casos (como o meu), o comando

libreoffice --headless --convert-to xls

só funciona ao usar o sudo. Se for esse o caso, você precisa alterar a propriedade de ~/.config com o comando:

sudo chown -R --reference="$HOME" ~/.config

como descrito aqui .

O script:

#!/usr/bin/python3

convert_dir = "/path/to/folder/tobeconverted"
import os
import subprocess

for root, dirs, files in os.walk(convert_dir):
    for name in files:
        if name.endswith(".xlsx"):
            # filepath+name
            file = root+"/"+name
            destination = root
            subprocess.Popen(["libreoffice", "--headless", "--convert-to", "xls", file, "--outdir", destination])
        else:
            pass

Copie-o em um arquivo de texto vazio, substitua o diretório no topo do arquivo, salve-o com a extensão .py e execute-o com o comando:

python3 /path/to/scrip/script.py

Mas tenho certeza que você sabe disso. :)

    
por Jacob Vlijm 15.05.2014 / 09:03
2

Isso funciona para mim:

cd X
find ./ -iname "*.xlsx" > /tmp/out
SAVEIFS=$IFS; IFS=$(echo -en "\n\b"); while read line ; do cd $(dirname $line); libreoffice --headless --convert-to xls $(basename $line); echo $PWD; cd -; done < /tmp/out; IFS=$SAVEIFS
    
por Nehal J Wani 14.05.2014 / 22:58