在我的文件夹中,我有一个后缀是创建此文件的日期的文件,例如:file.log2012-08-21, file.log2012-08-20 ... 现在我如何移动比 2012-08- 更早的文件20 ? 我知道我可以每天如何做到这一点:mv file.log2012-08-19 /old/
但我不知道什么时候停止......命令 mv 中是否有一些参数可以更轻松地做到这一点?
问问题
20914 次
4 回答
12
您可以find
与-mtime
参数一起使用。这假定上述文件后缀与文件上的日期戳相匹配。
-mtime +1
表示查找超过 1 天的文件-mtime -1
表示查找不到 1 天的文件-mtime 1
表示查找 1 天前的文件
示例(更新):
find . -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;
或者如果您只想find
在当前目录中添加-maxdepth 1
(否则,它将递归搜索):
find . -maxdepth 1 -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;
于 2012-08-21T13:31:23.350 回答
1
假设您的日志文件在写入最后一行后没有被修改:
find . ! -newer file.log2012-08-20 | xargs -r -IX mv X /old/
注意:使用此命令 file.log2012-08-20 也会被移动。如果您不想要它,请使用以前的文件:
find . ! -newer file.log2012-08-19 | xargs -r -IX mv X /old/
于 2012-08-21T13:37:03.757 回答
0
您可能需要为此编写一个小脚本。如果你所有的文件都在一个特定的命名约定中file.log2012-08-21
,那么像这样的东西就可以了。
since=$(date --date="2012-08-20" +%s)
for file in `ls -1 --color=none`
do
date=$(date --date="${file#file.log}" +%s)
[ $date -lt $since ] && mv -v $file /old/
done
在真正执行此操作之前,最好将 mv 命令更改为 echo 以查看要移动的文件是否正确。
于 2012-08-21T13:34:04.347 回答
-1
ls -l | awk '{print $NF}' | awk 'substr($0, length($0)-9, length($0)) < "2012-08-20" {system("mv "$0" /old/")}'
这会将所有早于“2012-08-20”的文件移动到文件夹“/old”。同样,您可以更改“2012-08-20”以指定您想要的特定日期。请注意,这假定文件后缀是日期戳,但前缀可以是任何名称。
如果您只需要移动超过特定天数的文件,那么我认为 rkyser 的回答对此更好。
于 2012-08-21T13:40:57.917 回答