我必须在目录及其子目录中找到某种类型的文件,并且只需打印出文件名。所以这是主要命令:
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"
.