find exec mvはinode(dir)を見つけてdirの名前を変更しますが、「対応するファイルまたはディレクトリはありません」を返します。

find exec mvはinode(dir)を見つけてdirの名前を変更しますが、「対応するファイルまたはディレクトリはありません」を返します。

次のfind-exec(mv)コマンドは say というディレクトリを探し、正常prog-3.6.9-stable-gnuに名前を変更します。ただし、コマンドは次も返します。

検索: './prog': 対応するファイルやディレクトリがありません。

これはコマンドです:

find ./ -type d -name 'prog-*' -exec mv {} prog \;

find-exec(rm)ディレクトリが次の場合、同様の結果が得られます。

findコマンドが来たと仮定すると今後exec unzip 操作中 (または exec rm -rf ) なぜこの標準エラーがあるのか​​尋ねたいと思います。私は、ファイルが見つかり、変更された場合、なぜstderrが「対応するファイルやディレクトリがありません」になるのでしょうか?

ベストアンサー1

このエラーはフォルダー ""を移動しているために発生しますprog-*
実際の動作findは次のとおりです。

findまず、ディレクトリ自体を分析し、その内容を分析します。

したがって、findあなたの例では次のようになります。
1.発見する目次prog-3.6.9-stable-gnu
2.名前変更 3. アクセスを試みます。 4. フォルダが見つからないため、エラーを返しますprog
prog-3.6.9-stable-gnu
prog-3.6.9-stable-gnu

探すディレクトリを最初に解析し、その内容を解析する順序を「幅優先ナビゲーション」と呼びます。その反対は「深さ優先ナビゲーション」です。-depth呼び出すオプションがあります。-depth言及された内容を読んでみると面白いです。マニュアルページ探す(1)

  • " -depth: ディレクトリ自体の前に各ディレクトリの内容を処理します。"
  • -delete動きはまた、次のことを意味します。-depth
  • "findコマンドラインは式として評価されるため、前に置くと-deletefindが指定した開始点より下のすべてのエントリを削除しようとします。"
  • 「後で使用したいfindコマンドラインをテストするときは、後で驚きを避けるために明示的-deleteに指定する必要があります-depth。」
  • -delete暗黙の意味のために、と一緒に-depth効果的に使用することはできません。」-prune-delete

おすすめ記事