実行ファイルとテキストファイルの2種類のファイルを見つける方法

実行ファイルとテキストファイルの2種類のファイルを見つける方法

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とテキストファイルだけが欲しい。*.txtlapackplasma

find2つの呼び出しを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 .

関連情報