我正在尝试编写一个简单的循环,它将遍历当前目录中的文件并只打印文件名。
我试过了:
#!/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上运行它
谢谢
答案 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,以了解什么代码可以起到什么作用。
如我所显示的描述链接,我可以避免在这里重复。