【问题标题】:Loop through files in Mac terminal在 Mac 终端中循环文件
【发布时间】:2015-10-26 04:24:33
【问题描述】:

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

我试过了:

#!/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 上运行它

谢谢

【问题讨论】:

  • “没用”是什么意思?它打印了什么吗?你收到错误了吗?你是如何保存脚本的,你是如何运行它的?
  • @choroba 我更新了问题
  • @NikosDim 如果您看到“/Users/nick/Desktop/*.jpg”作为输出,很可能是因为该模式不匹配任何内容。如果您只是“回显 /Users/nick/Desktop/*.jpg”(不带引号)会发生什么?这种行为在 bash 中是一种“陷阱”,因为即使实际上没有找到任何文件,$FILES 仍会评估为 glob 模式。一个常见的做法是添加一个 'if [ -e $f ];然后 ... fi' 围绕你的 for 循环的主体进行测试,以处理无法匹配任何文件的 glob。您能否确认您的 ~/Desktop 中是否有任何 .jpg 文件?
  • 现在可以使用了。不知道我做错了什么。 Desktop 中肯定有 jpg 文件。 Echo 正在按预期爆炸。

标签: macos bash unix


【解决方案1】:
for f in /Users/nick/Desktop/*.jpg; do echo $f; done

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

【讨论】:

【解决方案2】:

请试试这个:

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

【讨论】:

    【解决方案3】:

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

    find . type f
    

    【讨论】:

    • OP 没有要求找到文件的方法。他想简单地在遍历目录的基本逻辑上增加他的逻辑。无论如何,您的回答无济于事。
    【解决方案4】:

    基于单/一行的解决方案,(在终端外壳中使用/运行):
    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,了解什么代码执行什么功能。
    正如我已经展示了一个描述的链接,我可以避免在这里重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      相关资源
      最近更新 更多