如何将旧文件移动到另一个文件夹

在我的文件夹我有文件后缀是date,当这个文件被创build,例如:file.log2012-08-21,file.log2012-08-20 …现在我怎么能移动文件,然后是2012-08- 20? 我知道我怎么可以做这一天一天: mv file.log2012-08-19 /old/但我不知道什么时候停止…是否有一些参数在命令mv做到这一点更容易?

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的答案是更好的。

您可以使用-mtime参数使用find 。 这假设如上所述的文件后缀匹配文件上的日期戳。

  • -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/ \; 

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

 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/ 

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