Преобразование нескольких файлов документов в их текущие папки

3

У меня есть папка с именем X, внутри которой есть много папок и подпапок. Я хочу искать во всех папках внутри X и найти определенный тип документа. Например xlsx и преобразуйте каждый файл в файл xls . В этом случае мне нужно использовать опцию libreoffice convert, например libreoffice --headless --convert-to xls , но вот улов. После преобразования каждый преобразованный файл должен находиться в той же папке, что и исходный файл xlsx .

Пример:

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

После преобразования:

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

Новый xls * в этом случае будет преобразован в ту же папку, что и исходный xlsx . Это будет сделано во всех подпапках и во всех найденных xlsx .

    
задан Luis Alvarado 14.05.2014 в 22:39
источник

2 ответа

3

Вот скрипт python, который делает, как вы описали.

По соображениям удобства, которые будут использоваться с другими командами преобразования, я определил filepath+name и destination перед вводом его в команду convert. Это также позволяет легко изменить назначение на что-то другое, чем текущий каталог файла (если по какой-то причине вам может понадобиться это).

note: В некоторых случаях (например, мой) команда

libreoffice --headless --convert-to xls

работает только при использовании sudo. Если это так, вам нужно сменить владельца ~/.config с помощью команды:

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

, как описано здесь .

Сценарий:

#!/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

Скопируйте его в пустой текстовый файл, замените каталог в верхней части файла, сохраните его с расширением .py и запустите его с помощью команды:

python3 /path/to/scrip/script.py

Но я уверен, что вы это знаете. :)     

ответ дан Jacob Vlijm 15.05.2014 в 09:03
источник
2

Это работает для меня:

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
    
ответ дан Nehal J Wani 14.05.2014 в 22:58