循环访问Mac终端中的文件

时间:2015-08-03 22:35:50

标签: macos bash unix

我正在尝试编写一个简单的循环,它将遍历当前目录中的文件并只打印文件名。

我试过了:

#!/bin/bash    
FILES=/Users/nick/Desktop/*.jpg
    for f in $FILES
    do
        echo $f
    done

但它没有用。运行./script它只是打印" / Users / nick / Desktop / *。jpg"。没有错误

我在MacBook Pro 10.10.4上运行它

谢谢

4 个答案:

答案 0 :(得分:36)

for f in /Users/nick/Desktop/*.jpg; do echo $f; done

修改 实际上我认为@KyleBurton的this comment非常聪明,应该被考虑进去,因为它解释了为什么可以观察到这样的结果。

答案 1 :(得分:0)

请试试这个:

for f in $(ls /Users/nick/Desktop/*.jpg); 
do echo $f; 
done

答案 2 :(得分:0)

您可以使用简单的find命令来获取所有类型为file ..

的东西。
find . type f

答案 3 :(得分:0)

基于单行/单行的解决方案,(在Terminal Shell中使用/运行):
find "./" -not -type d -maxdepth 1 -iname "*.jpg" -print0 | while IFS= read -r -d $'\0' fileName ; do { echo "$fileName"; }; done; unset fileName;

对于您/ OP,将"./"更改为"/Users/nick/Desktop/"

要在脚本文件中使用:

#!/bin/bash
find "./" -not -type d -maxdepth 1 -iname "*.jpg" -print0 | while IFS= read -r -d $'\0' fileName ; do {
    echo "$fileName";
    # your other commands/codes, etc
};
done;
unset fileName;

或,使用(推荐)以下代码作为脚本:

#!/bin/bash
while IFS= read -r -d $'\0' fileName ; do {
    echo "$fileName";
    # your other commands/codes, etc
};
done < <(find "./" -not -type d -maxdepth 1 -iname "*.jpg" -print0);
unset fileName;

请查看我的其他答案here,以了解什么代码可以起到什么作用。
如我所显示的描述链接,我可以避免在这里重复。