Конвертируйте несколько файлов документов в свои текущие папки
У меня есть папка с именем 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