我正在 Red Hat Enterprise Linux Server 版本 7.5 (Maipo) 中创建一个脚本,以查找test*.txt
6 个月前 10 天的所有指定文件。我从中复制的原始目录包含有效文件,但是当我尝试移动文件时,它会出错。下面列出了脚本和错误消息。为什么会失败以及我可以采取哪些措施来修复它?
find /INTER/f/d/o/ -type f -name "test*.txt" -mtime +190 -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;
mv: target /INTER/f/d/o/test1.txt is not a directory
mv: target /INTER/f/d/o/test2.txt is not a directory
mv: target /INTER/f/d/o/test3.txt is not a directory
mv: target /INTER/f/d/o/test4.txt is not a directory
此外,当文件在存档目录中保存 7 个月加 10 天后,请将其删除。使用下面的脚本,我收到以下错误。
find /INTER_ARCHIVE/f/d/o/ -type f -name "test*.txt" -mtime +400 -exec rm {};
find: missing argument to `-exec'
答案1
你的第一个命令:
find /INTER/f/d/o/ -type f -name "test*.txt" -mtime +190 -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;
在这里,我假设您想要移动找到的与模式匹配且足够旧的文件。命令mv
位格式错误,应该类似于
-exec mv {} /some/destination/path \;
即,“将找到的文件( {}
)移动到某个目的地”。
从命令中不清楚您希望将文件移动到哪里,但是当您编写它时,您正在移动文件到找到的路径名。这会失败,因为mv
尝试将多个文件移动到非目录的位置。
在你的第二个命令中,
find /INTER_ARCHIVE/f/d/o/ -type f -name "test*.txt" -mtime +400 -exec rm {};
你只是未能正确地终止论证-exec
。最后一点应该看起来像
-exec rm {} \;
或者简单地
-delete
如果您的实现find
支持这一点。
也可以看看 ”了解“find”的 -exec 选项”。
答案2
你的第一个命令:
find ... -exec mv /INTER/f/d/o/"test*.txt" /INTER_ARCHIVE/f/d/o/ {} \;
将传递给mv
参数/INTER/f/d/o/test*.txt
(字面意思是带有星号),/INTER_ARCHIVE/f/d/o/
然后传递给当前find
正在处理的文件。mv
看到三个参数,因此它希望将前两个移动到第三个,然后第三个参数必须是目录。
不会test*.txt
扩展到任何匹配的文件名,因为find
不-exec
通过 shell 运行命令(您必须使用-exec sh '...' \;
它)。不管怎样,你并不是想这样做,因为test*.txt
在这里通配符会违背-mtime
.
你可能想要的是
find ... -exec mv {} /INTER_ARCHIVE/f/d/o/ \;
find
将当前正在处理的文件移动到/INTER_ARCHIVE/f/d/o/
。
或者使用 GNU mv
:
find ... -exec mv -t /INTER_ARCHIVE/f/d/o/ {} +
通过一次调用来处理多个文件mv
。