私がこれを入力するたびに:
find . -type f -name 'diag*' -mtime +30 -exec mv {} temp_diag \;
SunOSは常にこのメッセージを受け取ります。
mv: ./temp_diag/diagnostic.log.68.gz and temp_diag/diagnostic.log.68.gz are identical
mv: ./temp_diag/diagnostic.log.37.gz and temp_diag/diagnostic.log.37.gz are identical
mv: ./temp_diag/diagnostic.log.18.gz and temp_diag/diagnostic.log.18.gz are identical
私が使っているコマンドはうまくいきますが、メッセージの意味にのみ興味があります。
答え1
このコマンドを使用すると、現在のパスを下に移動します。だからあなたは次のようなものを持っています:
dir1
dir1/temp_diag
dir1/temp_diag/file1
内部でコマンドを実行しdir1
、dir1/temp_diagを見て実行します。
mv ./temp_diag/file1 temp_diag/file1
本質的には、コマンドにファイルを独自に移動するように指示することです。
修正する: ファイルがあるサブディレクトリがない場合は、maxlength 1を検索するオプションを追加できます。だから:
find . -type f -name 'diag*' -maxdepth 1 -mtime +30 -exec mv {} temp_diag \;
または、サブディレクトリがあるが temp_diag を含めたくない場合は、次の手順を実行します。
find . -path ./temp_diag -prune -o -print -type f -name 'diag*' -mtime +30 -exec mv {} temp_diag\;
答え2
あなたのfind
コマンドは、temp_diagディレクトリに移動してファイルを見つけ、ファイルmv
を自分でコピーしようとします。