使用 find 返回目录中的某些文件名(不带路径)

使用 find 返回目录中的某些文件名(不带路径)

我想用来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

正确的形式如下以及如果您想要的话文件名仅用于打印、使用findshell (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%fPOSIX 的 GNU 扩展find

相关内容