我们有一个 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 "/(\.)+[^/]+$"