find命令:如何忽略路径名?

find命令:如何忽略路径名?

我必须在目录及其子目录中找到某种类型的文件,并且只需打印出文件名。所以这是主要命令:
find -type f -name "*.c"

现在,我怎样才能从每个结果中切断路径呢? (这可能可以用 awk 来完成,但我希望有一种更简单的方法来做到这一点)。

答案1

GNU find 支持-printf谓词,它支持%f在文件名上输出的格式说明符。

find -type f -name "*.c" -printf '%f\n'

答案2

使用起来awk并不复杂:

find . -name '*.c' -type f | awk -F/ '{print $NF}'

或者sed

find . -name '*.c' -type f | LC_ALL=C sed 's|.*/||'

(假设文件路径不包含换行符)并且这适用于任何find实现。

zsh

print -rC1 -- **/*.c(N.:t)

答案3

您可以使用该basename程序获取文件名:

find . -type f -name \*.c -exec basename {} +

这适用于find没有 GNU-printf扩展名的系统。

答案4

GNU 查找知道-printf。如果您也搜索子目录,那么文件名可能会出现多次(通常)!

你需要-printf "%p\n"-printf "%f\n".

相关内容