从命令行复制本月修改的所有文件

时间:2013-07-24 18:06:12

标签: shell grep pipe ls

我想复制本月修改过的目录中的所有文件。我可以列出这样的文件:

ls -l * | grep Jul 

然后复制它们我试图通过cp将结果导入xargs但是没有成功(我认为)因为我无法弄清楚如何解析{{1} }输出只是获取ls -l的文件名。

我确信有很多方法可以做到这一点;我会给那些可以告诉我如何以这种方式解析cp的人(或者说我从那个位置下来)给出正确的答案,尽管我也有兴趣看到其他方法。

谢谢!

2 个答案:

答案 0 :(得分:4)

当然,仅仅执行grep Jul是不好的,因为您的名字中可能包含Jul的文件。

实际上,find可能是适合您工作的正确工具。像这样:

find $DIR -maxdepth 1 -type f -mtime -30 -exec cp {} $DEST/ \;

其中$DIR是您的文件所在的目录(例如'。'),$DEST是目标目录。

  • -maxdepth 1标志表示它不会查看子目录中的文件(不是递归的)

  • -type f标志表示它只查看常规文件(例如不是目录)

  • -mtime -30表示它会查看修改时间超过30天的文件(+30将超过30天)

  • -exec标志表示它对每个文件执行以下命令,其中{}替换为文件名,\;是命令的结尾

答案 1 :(得分:1)

有兴趣了解如何使用zsh

完成此操作
ls -lt *.*(mM0)

上个月

ls -lt *.*(mM1)

或用于确切的日期日期范围

autoload -U age
ls -tl *.*(e#age 2014/06/07 now#)
ls -tl *.*(e#age 2014/06/01 2014/06/20#)