在定位中排除隐藏文件

在定位中排除隐藏文件

我们有一个 Ubuntu NAS,它与一些 Mac 共享 SMB 和 Netatalk,我经常用它locate来查找文件。不幸的是,自从安装 Netatalk 以来,它已经写入了大量.AppleDouble缓存文件,以便更快地与 AFP 共享(我猜想),而我locate打印了所有这些信息。我经常使用cp文件,却发现我意外复制了一个无用的隐藏文件。

我一直在使用它locate -i filename | fgrep -v ".AppleDouble" | fgrep -v "._"来删除那些隐藏文件,但我想以bashrc某种方式改变它,使它或多或少成为默认设置。

从locate打印结果中排除隐藏文件的最有效方法是什么?使用正则表达式?现在,我会编写一个脚本,将参数传递给locate并通过管道传递给grep,如下所示,但如果有更简单的方法,请告诉我。

答案1

要在使用定位时排除隐藏文件,请尝试以下操作:

locate -i --regex "^/absolute/path/to/the/directory/[^\.]+"

如果目录包含.hidden、等文件..hidden...hiden它们也将被排除。如果您只想排除,请从末尾.hidden删除:+

locate -i --regex "^/absolute/path/to/the/directory/[^\.]"

或者简单地(也不需要扩展正则表达式):

locate -ir "^/absolute/path/to/the/directory/[^\.]"

编辑:编辑问题后,问题的整个含义现在不同了,我最初的答案在修改后的上下文中不正确。运行以下命令从输出中排除所有隐藏文件locate(假设文件名不包含/):

locate -i "file_name" | egrep -v "/(\.)+[^/]+$"

相关内容