我想找到两种类型的文件(可执行文件和文本文件)并为它们创建软链接。到目前为止我的解决方案是:
find src -maxdepth 1 -not -type d -executable -exec ln -fs {} . \;; \
find src -name "*.txt" -exec ln -fs {} . \;
目录结构为:
src
src/lapack
src/plasma
我只想从和子目录中获取可执行文件src
和文本文件。*.txt
lapack
plasma
我想找到一种更优雅的解决方案,将两个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 .