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

时间:2012-08-21 13:17:12

标签: linux shell

在我的文件夹中我有文件,后缀是创建此文件的日期,例如: file.log2012-08-21,file.log2012-08-20 ...现在我怎样才能移动比2012-08-20更旧的文件?我知道如何每天都能做到这一点:mv file.log2012-08-19 /old/但是我不知道什么时候停止......命令mv中是否有一些参数更容易实现?

4 个答案:

答案 0 :(得分:11)

您可以将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/ \;

答案 1 :(得分:1)

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

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/

答案 2 :(得分: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以查看要移动的文件是否正确。

答案 3 :(得分:-1)

ls -l | awk '{print $NF}' | awk 'substr($0, length($0)-9, length($0)) < "2012-08-20" {system("mv "$0" /old/")}'

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

如果您只需要移动某些日期之前的文件,那么我认为rkyser的答案就更好了。