在Linux中使用find命令时排除隐藏文件和文件夹

6

我正在尝试在Linux中使用find命令时排除隐藏文件和文件夹。

我需要排除以点号(.hidden)开头的文件或文件夹,同时还需要排除以@符号开头的文件夹(如@eaDir)。

目前,我有以下命令似乎可以工作,但也许有更优雅的方法?

find /path/to/start/search/ -not -path '*@eaDir*' -not -path "*/\.*" -type f -mtime -2 

我看到过使用正则表达式的示例,例如:

find . \( ! -regex '.*/\..*' \) -type f

但是我不确定如何在使用-regex选项时排除@eaDir目录?

我相信也可能有以两个点开头的隐藏文件,例如"..hidden"?我的命令已经覆盖了这些文件吗?还是我需要添加第三个选项如 -not -path "*/\..*" 来排除这些文件呢?

然后我看到一些使用-prune的例子,以便find命令不会降至隐藏目录中,但我不确定我该如何在我的示例中正确使用它。我对此很感兴趣,因为这可以加快速度。

谢谢!


2个回答

6
使用-not -name '.*',这将排除任何以.开头的名称。

1
也许我误解了什么,但这对我不起作用,例如: $ find . -type d -not -name ".*" 包括隐藏目录中的文件,就像 $ find . -not -path '/[@.]' -type f 也是一样。也许是因为我的旧版本的find... v4.4.2, 2007。 - Damo
1
这对我有用,但是很难记住... find . -type d ( -path "*/.*" ) -prune -o -name '*.txt' -print - Damo
我的答案只是排除返回的文件和目录,而不是下降到的目录。因此它不会返回.foo,但它会返回.foo/bar - Barmar

5

排除以 .@ 开头的文件和文件夹:

find /path/to/start/search/ -not -path '*/[@.]*' -type f -mtime -2

排除以 . 开头的文件和以 . @ 开头的文件和文件夹:

find /path/to/start/search/ -not -path '*/.*' -type f -mtime -2 | grep -v '/@.*/.*'

谢谢,那个很好用,比我最初的命令更加简洁!现在我只需要弄清楚“-prune”选项。 - Phil
找到 /path/to/start/search/ -prune -not -name '.' -type f -mtime -2 | grep -v '/@./.*`,我猜?(未经测试) - Camusensei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接