Конвертируйте несколько файлов документов в свои текущие папки

У меня есть папка с именем X, внутри которой есть много папок и подпапок. Я хочу найти во всех папках внутри X и найти определенный тип документа. Например, xlsx и преобразуйте каждый файл в файл xls. В этом случае мне нужно использовать опцию преобразования libreoffice, как 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.

2 ответа

Решение

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

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

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

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

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

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

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
Другие вопросы по тегам