我的目的是显示目录和文件(仅在树结构中具有 .dat 或 .DAT 文件扩展名。我的 bash 脚本中的以下代码示例不仅返回这些目录和文件,而且还返回具有 .txt / .xmlfd 扩展名的文件.谁能指出我的代码有什么问题吗?
sudo -${user} sh -c 'cd '${userdirectory}'; find . -type f | grep -i '*.dat' | sort -u | xargs tree -L 3 -C'
sudo -${user} sh -c 'cd '${userdirectory}'; find . -type f -iname '*.dat' -exec dirname {} \; | sort -u | xargs tree -L 3 -C'
sudo -${user} sh -c 'cd '${userdirectory}'; find . -type f -name '*.[dD][aA][tT]' -exec dirname {} \; | sort -u | xargs tree -L 3 -C'
您的 grep 正则表达式没有多大意义:正则表达式开头的星号具有字面星号的含义,并且仅当
find
生成的文件名之一包含星号时才匹配。句点与任何字符匹配,因此您的 grep
基本上会在文件名中搜索子字符串,例如 *xdat
或 *%dat
。如果您搜索名称以 .dat
结尾的文件,请 grep 查找 [.]dat$
:
grep -i '[.]dat$'
[.] matches a literal dot, and the
$` 将匹配锚定在行尾。
当然,这一切都要求您的文件名不包含换行符。