mlocate:如何仅打印文件

mlocate:如何仅打印文件

我有以下版本的定位:

$ locate --version
mlocate 0.26
Copyright (C) 2007 Red Hat, Inc. All rights reserved.
This software is distributed under the GPL v.2.

This program is provided with NO WARRANTY, to the extent permitted by law.

我试图找到具有某些特定基名的所有文件(而不是目录),例如python,所以我尝试了以下操作:

$ xargs -a <(locate -b '\python') -I{} file {} | sed -E '/directory|symbolic/d;s/:.*$//g'

这将准确打印预期的输出。但是,我想知道是否有一种有效的方法可以实现这一目标?

答案1

您的命令还会输出当前用户无权访问的文件。

稍微短一点的解决方案是

locate -0b '\python' | perl -0nE 'say if -f'

但它不会打印不可访问的文件。

您也可以使用 bash 循环文件,但它有点冗长:

locate -0b '\python' | while IFS= read -d '' -r f ; do
    [[ -f $f ]] && printf '%s\n' "$f"
done

相关内容