如何在bash中找到没有dot的目录?

时间:2016-01-05 21:57:13

标签: bash find

我尝试查找没有点符号的文件夹。 我通过这个脚本在用户目录中搜索它:

!#/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

我做错了什么?

提前致谢!

3 个答案:

答案 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/!(*.*)/