使用 find 继续获取相同的消息文件

使用 find 继续获取相同的消息文件

每当我输入这个:

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将该文件复制到其自身上。

相关内容