我正在循环浏览一个包含许多子文件夹和文件的文件夹。我只想进入内部文件夹(子文件夹)时执行命令。但是当我运行我的shell脚本时,它只对第一个文件夹执行了命令。它不会循环到其余文件夹。
这是我的命令
for f in /home/SUPPORTINGDOCS_BK/SUPPORTINGDOCS_BATCH2/*;
do
[ -d $f ] && cd "$f" && exec libreoffice --headless --convert-to odt *.docx
done
exit;
如果我的shell脚本中有错误,请告诉我。
答案 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参数将允许您对搜索定义找到的对象执行命令;字符串{}表示找到的对象,在本例中是您要查找的目录。