无法循环浏览所有文件夹

时间:2015-04-10 07:53:22

标签: linux bash shell libreoffice

我正在循环浏览一个包含许多子文件夹和文件的文件夹。我只想进入内部文件夹(子文件夹)时执行命令。但是当我运行我的shell脚本时,它只对第一个文件夹执行了命令。它不会循环到其余文件夹。

这是我的命令

for f in /home/SUPPORTINGDOCS_BK/SUPPORTINGDOCS_BATCH2/*;
do 
 [ -d $f ] && cd "$f" && exec libreoffice --headless --convert-to odt *.docx
done

exit;

如果我的shell脚本中有错误,请告诉我。

2 个答案:

答案 0 :(得分:1)

cd到该文件夹​​,但从未cd回来。

或者,添加

cd -

done之前,或者更好,将整个身体循环括在括号中:

( [ -d $f ] && \
  cd "$f" && \
  exec libreoffice --headless --convert-to odt *.docx 
)

它将在子shell中运行,因此cd不会影响主shell的当前工作目录。

答案 1 :(得分:1)

您可以使用find:

find /path/to/search -type d -exec libreoffice --headless --convert-to odt {}/*.docx \;

exec参数将允许您对搜索定义找到的对象执行命令;字符串{}表示找到的对象,在本例中是您要查找的目录。