我通过某些文件循环(所有文件开始MOVIE)的文件夹与此bash脚本代码:巴什脚本,遍历文件夹中的文件失败
for i in MY-FOLDER/MOVIE*
do
当有文件,工作正常文件夹。但是,如果没有,它会以某种方式继续进行,它认为它被命名为MY-FOLDER/MOVIE *。
如何避免它如果没有该文件夹中的所有文件后
do
进入东西呢?
我通过某些文件循环(所有文件开始MOVIE)的文件夹与此bash脚本代码:巴什脚本,遍历文件夹中的文件失败
for i in MY-FOLDER/MOVIE*
do
当有文件,工作正常文件夹。但是,如果没有,它会以某种方式继续进行,它认为它被命名为MY-FOLDER/MOVIE *。
如何避免它如果没有该文件夹中的所有文件后
do
进入东西呢?
for i in $(find MY-FOLDER/MOVIE -type f); do
echo $i
done
的find
效用是Linux的瑞士军刀之一。根据您提供的选项,它从您提供的目录开始,并找到所有子目录中的所有文件。
-type f
只会找到普通文件(不是目录)。
正如我写的那样,该命令也会在子目录中找到文件;你可以通过加入-maxdepth 1
使用nullglob
选项。
$ shopt -s nullglob
$ for i in zzz* ; do echo "$i" ; done
$
即使没有'nullglob'选项,你的代码对我有用,我做错了什么? –
@DenisGolomazov:你有匹配的文件。尝试使用不匹配文件的glob。 –
谢谢,明白了。结果是'zzz *'。 –
for file in MY-FOLDER/MOVIE* do # Skip if not a file test -f "$file" || continue # Now you know it's a file. ... done
找到的是瑞士军刀,属实。但是用for循环的方式很容易在包含空格的文件上失败。 –
此外,由于您离开我没有引用,这将在'echo $ i'上分割。参见[此](http://stackoverflow.com/a/7039579/3076724),用于更好的语法的例子。 – BroSlow