*nix find -type 标志:它可以接受多种类型吗?

*nix find -type 标志:它可以接受多种类型吗?

我想使用find来获取所有 simlink 和常规文件。我可以单独使用 -type 来获取这些文件,也可以使用 -o 将它们串在一起,但显然我不能这样做-type fl

有没有办法压缩这个命令?这太麻烦了。

find -type l -name node-dev -exec ls -lah {} + -o -type f -name node-dev -exec ls -lah {} +

我希望能够在没有的情况下运行它-o,例如:

find -type lf -name node-dev -exec ls -lah {} +

手册页似乎表明这是不可能的(它没有提到任何有关额外-type标志参数的内容),但我想我还是会问并尝试学习一些东西。

请注意,这些文件不保证任何合理的扩展名命名结构,因此任何基于正则表达式的解决方案可能都行不通。此外,我可以使用运算'!'符来排除这样的目录答案表明,但理想情况下,我想从搜索中排除更多的内容,而不仅仅是目录。

答案1

# Apply to only link or file type directory entries: 
$ find . \( -type l -o -type f \) -name node-dev -exec ls -lah {} \;

# Apply to anything but a directory - add more with -o in between "\(" & "\)" meta-characters:
$ find . ! \( -type d \) -name node-dev -exec ls -lah {} \;

请注意,在 find 命令上,有一个 -ls 开关可以替代 -exec 调用,请记住 find 开始时可能很慢,但是必须为每个找到的文件创建一个新进程,这确实会使用系统资源,而这些资源可以在其他地方得到更好的利用。

相关内容