使用BASH nullglob来验证目录中是否存在* .c文件
时间:2020-01-09 10:37:25 来源:igfitidea点击:
BASH下nullglob变量的用法?
如何检查任何目录中的任何* .c文件?
BASH shell具有以下两个特殊变量来控制路径名的扩展。
Bash扫描每个单词以查找字符* 、?和[。
如果出现这些字符之一,则将该单词视为一个模式,并替换为与该模式匹配的按字母顺序排序的文件名列表。
nullglob
:如果设置,bash允许不匹配文件的模式扩展为空字符串,而不是扩展为它们自己。
这对于检查目录中的任何* .mp3或* .cpp文件很有用。dotglob
如果设置,bash包含以a开头的文件名。
扩展路径名的结果。
如何设置和取消设置nullglob变量?
使用shopt命令切换变量的值。
-s选项启用nullglob效果,-u选项禁用nullglob选项。
shopt -s nullglob # enable shopt -u nullglob # disable
这是示例shell脚本,以查看目录中是否存在* .mp3:
#!/bin/bash old=$(cd) [ $# -eq 0 ] && exit 1 [ -d ] && cd || exit 2 shopt -s nullglob found=0 for i in *.mp3; do echo "File $i found" # or take other action found=1 done shopt -u nullglob [ $found -eq 0 ] && echo "Directory is empty" cd $old
如果没有nullglob,则仅当给定目录中没有文件时,我才会扩展为* .mp3。
您还可以使用GNU find命令来查找目录是否为空,即检查名为~/project/editor的目录中是否有任何* .c文件:
find ~/project/editor -maxdepth 0 -empty -exec echo {} directory is empty. \;
其中:
-maxdepth 0
:不扫描子目录。-empty
:文件为空,可以是常规文件或目录。-exec echo {}目录为空。 \;
:如果目录为空,则显示消息。