我尝试查找没有点符号的文件夹。 我通过这个脚本在用户目录中搜索它:
!#/bin/bash
users=$(ls /home)
for user in $users;
do
find /home/$user/web/ -maxdepth 1 -type d -iname '*' ! -iname "*.*"
done
但我在结果用户中看到带有点的文件夹,例如 - test.uk或test.cf
我做错了什么?
提前致谢!
答案 0 :(得分:2)
您可以find
使用-regex
选项:
find /home/$user/web/ -maxdepth 1 -type d -regex '\./[^.]*$'
'\./[^.]*$'
将匹配没有任何DOT的名称。
答案 1 :(得分:0)
问题是您的命令在/home/username/web/
中找到目录不包含点的目录。
它不检查username
本身是否包含点。
要查看任何地方是否有点,您可以使用ipath
代替iname
:
!#/bin/bash
users=$(ls /home)
for user in $users;
do
find /home/$user/web/ -maxdepth 1 -type d -iname '*' ! -ipath "*.*"
done
或更正确,更简洁:
#!/bin/bash
find /home/*/web/ -maxdepth 1 -type d ! -ipath "*.*"
答案 2 :(得分:0)
无需寻找;只需使用扩展的glob来匹配任何不包含.
shopt -s extglob
for dir in /home/*/;
do
printf '%s\n' "$dir"/!(*.*)
done
你甚至可以完全取消循环:
shopt -s extglob
printf '%s\n' /home/*/!(*.*)
要排除/home
中包含.
的目录,您可以在任何一个示例中将/home/*/
更改为/home/!(*.*)/
。