每当我输入这个:
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
您实际上是在告诉命令将文件移动到自身。
更新: 如果您没有任何带有文件的子目录,那么您可以添加选项来查找 maxdepth 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
将该文件复制到其自身上。