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

У меня есть папка с именем 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 .

4
задан 15 May 2014 в 00:39

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

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

0
ответ дан 15 May 2014 в 00:39

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

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
0
ответ дан 15 May 2014 в 00:39

Другие вопросы по тегам:

Похожие вопросы: