Linux Bash:按时间戳移动/复制文件/目录

Linux Bash:按时间戳移动/复制文件/目录

这是我正在使用的命令:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

我尝试将许多目录从一个目录复制到另一个目录,但仅限于过去 2 小时内创建的目录。

但是我的命令不起作用,我真的不明白为什么,如果这不明显的话,我不是一个经验丰富的 Linux 用户。从我得到的信息来看,cp似乎将我的预期目的地解释为源。

我甚至尝试过使用xargs,但我对其了解得更少。

在 Debian Squeezy 中使用 Bash 并以 root 身份运行命令。

答案1

从我得到的信息来看,cp似乎将我预期的目的地解释为源头。

是的。这是因为一般的 Linux/Unix 语法是这样的:

[some command] [some command options] [source item] [destination item]

那么看看你的命令:

find absolute-path -name "*" -amin -120 -exec cp -f absolute-destination {} \;

cp -f absolute-destination {}是倒过来的,因为{}表示命令找到的源文件find,而“绝对目标”就是它本来的样子,即目标。因此,命令的这一部分应该改写为cp -f {} absolute-destination

此外:

  • -name "*"如果您要根据时间搜索所有文件,那么这是多余且多余的;这意味着您可以放弃它。
  • 此外,使用amin有点令人困惑,因为-amin -120表示“该文件已访问在过去的 120 分钟内。”如果你想采取行动创建文件的时间,yhat 应该改为cmin—又名:n几分钟前更改的—;更多详细信息请参阅 Linuxfind请参阅手册页。

因此最终的命令是:

find absolute-path -cmin -120 -exec cp -f {} absolute-destination \;

但是在运行该cp命令之前,您应该始终进行“试运行”,以echo准确查看发生的情况,如下所示:

find absolute-path -cmin -120 -exec echo {} \;

请记住,对这样的命令进行测试“试运行”从长远来看,运行实际/最终命令将为您省去很多麻烦。特别是如果您计划以 的形式运行该命令root

您永远不知道自己是否可能在命令逻辑中犯了一个简单的、无意的错误,而这个错误可能会以意想不到的方式搞砸。未经测试就匆忙将错误结构的命令投入“生产”可能会在开始时为您节省几分钟,但随后可能会导致数小时(在某些情况下是数天)的清理工作。总是在命令行中工作时要注意安全。

相关内容