Bash

mlocate:如何只列印文件

  • October 1, 2020

我有以下版本的定位:

$ 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'

這將準確列印預期的輸出。但是,我想知道是否有一種有效的方法來實現這一目標?

您的命令還會輸出目前使用者無權訪問的文件。

稍微短一點的解決方案是

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

引用自:https://unix.stackexchange.com/questions/612270