Linux 无法循环浏览所有文件夹

Linux 无法循环浏览所有文件夹,linux,bash,shell,libreoffice,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 don

我在一个有很多子文件夹和文件的文件夹中循环。我只想在进入内部文件夹(子文件夹)时执行命令。但当我运行shell脚本时,它只对第一个文件夹执行命令。它不会循环到其余文件夹

这是我的命令

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

exit;

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

您将
cd
放入文件夹,但决不能
cd
返回

或者,添加

cd -
完成之前
,或者更好,将全身循环括在括号内:

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

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

您可以使用find:

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

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

感谢@Vogel612提供有关添加详细解释的建议