パストリミングでコマンドの開始点を探す

パストリミングでコマンドの開始点を探す

勉強しなくてもいつもこんな悩みがあります。

別のディレクトリから始点のファイルを検索するときに始点のフルパスを指定しましたが、機能しませんでした。開始ディレクトリにあり、開始点へのフルパスを提供しても同じことが起こります。

find /path/from/start/. -path './anaconda3/*' -prune -o -name '*R' -print

お菓子が入っているかのように、「Trim」ディレクトリに直接移動します。

私が出発点にいる場合は、最初から始めることをお勧めし.ます。そうでなければ、find私が逃げようとしているパスは切り捨てられません。

find . -path './anaconda3/*' -prune -o -name '*R' -print

働く

たぶん詳細な回答でこの問題を解決できます。時には学ぶことになりますが、次に命令を受けたら、以前findに一度もやったことがなかったのと同じ問題に直面します。マニュアルページのこの章は-path pattern何かを言おうとしますが、それはvogonにあるようで、バーベルフィッシュはありません。

答え1

-path生成されたフルパス名と一致しますfind。で始まる場合、パス名はこれで始まります。 (必要ではなく複雑です).で始まると、パス名がで始まります。/path/from/start/./path/from/start

したがって、パス全体を一致させる必要があります。

find /path/from/start -path '/path/from/start/anaconda3/*' -prune -o -name '*R' -print

この部分はそれ自体がトリミングされるため、最後の部分/path/from/start/anaconda3も必要ありません。/*

find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print

-pathデフォルトでは、開始パスが「標準」パスで繰り返されることに注意してください。

find /path/from/start -path /path/from/start/anaconda3 -prune -o -name '*R' -print
     ^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^

find . -path './anaconda3/*' -prune -o -name '*R' -print
     ^        ^

これが削除したい唯一のディレクトリ、またはanaconda3すべてのディレクトリを削除したい場合は、anaconda3次のものを使用できます-name

find /path/from/start -name anaconda3 -prune -o -name '*R' -print

これは、複数の開始パスを指定する場合にも適用されます。各-path式は、すべての開始パスで生成されたフルパス名と一致します。したがって、次のことができます。

find /path/from/start /otherpath/from/elsewhere \
     -path /path/from/start/anaconda3 -prune -o \
     -path /otherpath/from/elsewhere/anaconda3 -prune -o \
     -name '*R' -print

関連情報