在当前文件夹中转换多个文档文件

我有一个名为X的文件夹,里面有很多文件夹和子文件夹。 我想搜索X中的所有文件夹并找到特定的文档类型。 例如xlsx并将每个文件转换为xls文件。 在这种情况下,我需要使用libreoffice转换选项,如libreoffice --headless --convert-to xls但这里是catch。 转换后,每个转换后的文件应与原始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中完成。

这是一个python脚本,如您所述。

为方便起见,为了与其他转换命令一起使用,我在convert命令中输入之前定义了文件filepath+namedestination 。 这也使得将目标更改为文件当前目录之外的其他内容变得容易(如果由于某种原因,您可能需要它)。

注意:在某些情况下(如我的),命令

 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