2種類のファイル(実行ファイルとテキストファイル)を見つけて、そのファイルへのソフトリンクを作成したいと思います。これまで私の解決策は次のとおりです。
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
2つの呼び出しを1つにまとめるよりエレガントなソリューションを探したいです。そのフラグを試しましたが、そのオプションに問題が-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 .