如何查找两种类型的文件:可执行文件和文本文件

如何查找两种类型的文件:可执行文件和文本文件

我想找到两种类型的文件(可执行文件和文本文件)并为它们创建软链接。到目前为止我的解决方案是:

find src -maxdepth 1 -not -type d -executable -exec ln -fs {} . \;; \
find src -name "*.txt" -exec ln -fs {} . \;

目录结构为:

src
src/lapack
src/plasma

我只想从和子目录中获取可执行文件src和文本文件。*.txtlapackplasma

我想找到一种更优雅的解决方案,将两个find调用合并为一个。我尝试使用该-o标志,但遇到了该-maxdepth选项的问题。

更新:

我正在尝试的组合命令是:

find src -maxdepth 1 -not -type d -executable -o -path src -name "*.txt"

但它不会获取子目录中的文本文件。我相信这是由于-maxdepth 1之前的标志造成的-o

答案1

您可以使用 GNU find 或其他支持的 find 来完成此操作-path,但我认为它并不更优雅。

find src \( -type f -executable ! -path 'src/*/*' -o -name '*.txt' \) \
     -exec ln -fs {} . +

您可以使用 zsh 代替。它是全局限定符比 find 语法更简洁。

ln -sf src/*/*(N*.) src/**/*.txt .

相关内容