我想用来find
返回具有特定文件名的文件,在本例中:不以_
.
我了解到我可以使用
find . ! '(' -name '_*' ')'
但是,我希望它返回不带前面路径名的文件名。有什么办法可以basename
在 bash 中使用 cmd 来执行此操作吗?
我也欢迎任何其他命令,就像ls
可以做到这一点。
答案1
是的,您可以使用basename
- 将其作为参数传递给-exec
操作:
find . ! -name '_*' -exec basename {} \;
(您的分组括号是不必要的,因为不存在运算符优先级问题)。
或者,如果您有 GNU find
,它的-printf
操作会为纯文件名提供格式说明符:
%f File's name with any leading directories removed (only the last element).
所以
find . ! -name '_*' -printf '%f\n'
答案2
正确的形式如下以及如果您想要的话文件名仅用于打印、使用find
和shell (POSIX sh/bash/Korn/zsh) parameter substitution expansion
.:
find /path/to -type f -name "[!_]*" -exec sh -c 'printf "%s\n" "${1##*/}"' _ {} \;
或者,如果您不介意领先,我们可以find
组合使用。-execdir
./
find /path/to -type f -name "[!_]*" -execdir printf '%s\n' {} +
你也会用find -type f ! -name "_*" ...
。
答案3
find . -type f ! -name "_*" -printf "%f\n"
withprintf
是%f
POSIX 的 GNU 扩展find
。