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

问题描述 投票:0回答:5

在我的文件夹中,我有一个文件,其后缀是创建该文件的日期,例如: file.log2012-08-21、file.log2012-08-20 ... 现在我如何移动早于 2012-08-20 的文件?我知道如何日复一日地做到这一点:

mv file.log2012-08-19 /old/
但我不知道何时停止...命令 mv 中是否有一些参数可以更轻松地做到这一点?

linux shell
5个回答
13
投票

您可以将

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



1
投票

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

注意:使用此命令 file.log2012-08-20 也会被移动。如果您不需要,请使用以前的文件:

find . ! -newer file.log2012-08-20 | xargs -r -IX mv X /old/



0
投票
find . ! -newer file.log2012-08-19 | xargs -r -IX mv X /old/

,那么类似这样的操作就可以完成工作。


file.log2012-08-21

在真正执行此操作之前,最好将 mv 命令更改为 echo,以查看要移动的文件是否正确。


0
投票

其他答案不合适,因为它还处理子目录,所以你需要这个命令:

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

这可以有效地找到所有早于指定文件
find . -maxdepth 1 -type f ! -newer 2374466.log -exec mv {} archive/ \;

的文件

-type f
并且仅在当前目录
! -newer 2374466.log
中查找而不进入子目录。
    


-1
投票
. -maxdepth 1


这会将所有早于“2012-08-20”的文件移动到文件夹“/old”。同样,您可以更改“2012-08-20”以指定您想要的特定日期。请注意,这假设文件后缀是日期戳,但前缀可以是任何名称。

如果您只需要移动超过特定日期的文件,那么我认为 rkyser 的答案更适合。

© www.soinside.com 2019 - 2024. All rights reserved.