我正在使用以下Bash脚本代码循环遍历文件夹中以MOVIE开头的特定文件:
for i in MY-FOLDER/MOVIE*
do
如果文件夹中有文件,那么它可以正常工作。但是当没有文件时,它会继续执行并认为其中一个名为MY-FOLDER/MOVIE*的文件存在。
我该如何避免它进入后续操作?
do
如果文件夹中没有任何文件怎么办?
我正在使用以下Bash脚本代码循环遍历文件夹中以MOVIE开头的特定文件:
for i in MY-FOLDER/MOVIE*
do
如果文件夹中有文件,那么它可以正常工作。但是当没有文件时,它会继续执行并认为其中一个名为MY-FOLDER/MOVIE*的文件存在。
我该如何避免它进入后续操作?
do
如果文件夹中没有任何文件怎么办?
使用 nullglob
选项。
$ shopt -s nullglob
$ for i in zzz* ; do echo "$i" ; done
$
for i in $(find MY-FOLDER/MOVIE -type f); do
echo $i
done
find
工具是Linux中瑞士军刀之一。它从您提供的目录开始,根据您给出的选项在所有子目录中查找所有文件。
-type f
将仅查找常规文件(而不是目录)。
正如我所写的那样,该命令还将在子目录中查找文件;您可以通过添加-maxdepth 1
来防止这种情况。
8年后进行编辑(感谢@tadman的评论!)
您可以完全避免使用循环
find . -type f -exec echo "{}" \;
这会告诉find
用其名称替换{}
并打印出每个文件的名称。转义分号是必要的,以终止传递给-exec
的命令。
对于 MY-FOLDER/MOVIE* 中的每个文件: 如果不是一个文件则跳过; 现在你知道它是一个文件。 ...
nullglob
选项的情况下对我来说是有效的,那我做错了什么? - Dennis Golomazov