for i in $(ls);do
if [ $i = '*.java' ];then
echo "I do something with the file $i"
fi
done
Run Code Online (Sandbox Code Playgroud)
我想遍历当前文件夹中的每个文件,并检查它是否与特定扩展名匹配.上面的代码不起作用,你知道为什么吗?
che*_*ner 181
不需要花哨的技巧:
for i in *.java; do
[ -f "$i" ] || break
...
done
Run Code Online (Sandbox Code Playgroud)
防护确保如果没有匹配的文件,循环将退出而不尝试处理不存在的文件名*.java.在bash(或支持类似的东西的shell)中,您可以使用该nullglob选项简单地忽略失败的匹配而不进入循环体.
shopt -s nullglob
for i in *.java; do
...
done
Run Code Online (Sandbox Code Playgroud)
uml*_*ute 13
正确答案是@Chepner's
EXT=java
for i in *.${EXT}; do
...
done
Run Code Online (Sandbox Code Playgroud)
但是,这是一个检查文件名是否具有给定扩展名的小技巧:
EXT=java
for i in *; do
if [ "${i}" != "${i%.${EXT}}" ];then
echo "I do something with the file $i"
fi
done
Run Code Online (Sandbox Code Playgroud)
lui*_*gil 11
递归添加子文件夹,
for i in `find . -name "*.java" -type f`; do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
循环通过与结尾的所有文件:.img,.bin,.txt后缀和打印文件名:
for i in *.img *.bin *.txt;
do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
或以递归的方式(也在所有子目录中找到):
for i in `find . -type f -name "*.img" -o -name "*.bin" -o -name "*.txt"`;
do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)