无法遍历所有文件夹

Posted

技术标签:

【中文标题】无法遍历所有文件夹【英文标题】:Not able to Loop Through all folders 【发布时间】:2015-04-10 07:53:22 【问题描述】:

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

这是我的命令

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

exit;

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

【问题讨论】:

【参考方案1】:

cd 到文件夹,但从来没有 cd 回来。

要么,添加

cd -

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

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

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

【讨论】:

【参考方案2】:

您可以为此使用 find:

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

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

【讨论】:

感谢@Vogel612关于添加详细解释的建议

以上是关于无法遍历所有文件夹的主要内容,如果未能解决你的问题,请参考以下文章

cmd中bat遍历文件夹下所有文件,并进行特定操作

SwiftUI - 将核心数据导出到 CSV 文件 - 无法遍历实体

循环遍历子目录批处理文件中的文件

C++如何遍历文件夹?

如何告诉ffmpeg按顺序遍历目录中的所有文件

Bash:无法通过 mediainfo 浏览目录中的所有文件