Linux 如何将旧文件移动到其他文件夹

Linux 如何将旧文件移动到其他文件夹,linux,shell,Linux,Shell,在我的文件夹中,我有一个文件,后缀是创建此文件的日期,例如: file.log2012-08-21,file.log2012-08-20。。。现在我如何移动比2012-08-20更旧的文件?我知道每天该怎么做:mv file.log2012-08-19/old/但我不知道什么时候停止。。。命令mv中是否有一些参数可以简化此操作?您可以使用find和-mtime参数。这假设上面提到的文件后缀与文件上的日期戳匹配 -mtime+1表示查找超过1天的文件 -mtime-1表示查找小于1天的文件 -mt

在我的文件夹中,我有一个文件,后缀是创建此文件的日期,例如: file.log2012-08-21,file.log2012-08-20。。。现在我如何移动比2012-08-20更旧的文件?我知道每天该怎么做:mv file.log2012-08-19/old/但我不知道什么时候停止。。。命令mv中是否有一些参数可以简化此操作?

您可以使用find和-mtime参数。这假设上面提到的文件后缀与文件上的日期戳匹配

-mtime+1表示查找超过1天的文件 -mtime-1表示查找小于1天的文件 -mtime 1表示查找1天以前的文件 更新的示例:

find . -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;
或者,如果您只想在当前目录中查找,则只需添加-maxdepth 1,否则,它将递归搜索:

find . -maxdepth 1 -type f -mtime +1 -name "file.log*" -exec mv {} /old/ \;

您可能需要为此编写一个小脚本。如果您所有的文件都在一个特定的命名约定中,比如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,以查看即将移动的文件是否正确。

假设日志文件在最后一行写入后未被修改:

find . ! -newer file.log2012-08-20 | xargs -r -IX mv X /old/
注意:使用此命令文件,还将移动.log2012-08-20。如果不需要,请使用上一个文件:

find . ! -newer file.log2012-08-19 | xargs -r -IX mv X /old/
ls-l|awk'{print$NF}'|awk'substr$0,长度$0-9,长度$0<2012-08-20{systemmv$0/old/}'

这将把所有早于2012-08-20的文件移到/old文件夹中。同样,您可以更改2012-08-20以指定所需的特定日期。注意:这假定文件后缀是日期戳,但前缀可以是任何名称


如果您只需要移动超过某一天的文件,那么我认为rkyser的答案更适合于此。

hm您在哪里指定文件名?可以有file.log2012-08-19或file1.log2012-08-19 file2.log2012-08-19,但我只想移动file.log*..@hudi它只提取带有日期后缀的所有文件。您只需将2012-08-20更改为您想要的任何日期。啊,好的,但当我在ls:ls-l文件之后添加文件名时,它应该可以正常工作?没错。如果你用ls-l,随便什么。只要名字以日期后缀结尾就行。例如,ls-l log.file*将使用相同的.hm,您在哪里指定文件名?可以有file.log2012-08-19或file1.log2012-08-19 file2.log2012-08-19,但我只想移动file.log*…在/old/末尾的反斜杠很重要。。。没有它,只有最后一个文件被移动到file/old。