コマンドを使用した後:
find path1/ -iname 'file*[1234]' -exec mv -t /home/user1/dir1/path1/path2 {} \;
ファイルが同じであるというエラーが発生します。コマンドが正常に完了しました。検索が開始される親ディレクトリは次のとおりです。path1/
次に、ターゲットディレクトリにファイルを移動する絶対パスを入力します。なぜこれが起こるのですか?
答え1
つまりmv
、特定のファイルをターゲットに移動するとファイル自体に書き戻されるため、特定のファイルを移動する必要はありません。
試してみても同じ結果が出るだろう
mv file file
名前がfile
。
についてはなぜ時には次のように進行します。
あなたはfind
道を走っていますpath1
。私はこれがpath1
絶対パスと同じであると仮定します/home/user1/dir1/path1/path2
。
ファイル名が使用中のパターンと一致する場合(これらのファイルは前のコマンド/home/user1/dir1/path1/path2
呼び出しによって渡されました。find
同じ find
ディレクトリ巡回順序は)なので、(si)のサブディレクトリを介して見つけることができますfind
。ファイルをからに移動するコマンドを実行するように求められます。これがメッセージを引き起こす原因です(実際に「エラー」と呼ぶことは迷います)。find
path2
path1
find
mv
path2
path2
到着避けるpath2
として調査するには、find
次のことができます。
find path1 \( -type d -path 'path1/path2' -prune \) -o -iname 'file*[1234]' -exec mv -t /home/user1/dir1/path1/path2 {} +
見つかったコンテンツがディレクトリ(-type d
)でパス名である場合は、path1/path2
ディレクトリを巡回したときに作成されたディレクトリ検索ツリーから削除します。それ以外の場合は、以前と同じように続けます(ほぼ一度にできるだけ多くのパス名を取得するためにfind
最後のパスを変更しました)。\;
+
mv