递归查找修改的文件并使用保留目录结构的目录进行复制

递归查找修改的文件并使用保留目录结构的目录进行复制

我想从目录中查找过去 1 年添加的图像,并将它们复制到保留原始文件夹结构的新目录。

我正在使用 find 但它没有复制任何内容。有什么方法可以使用 1 行命令来完成吗?

find image/* -mtime +356 -exec cp {} modified-last-year/ \;

运行此命令时我位于图像目录中,并且我只想递归搜索图像文件夹。

[编辑]
回答完这两个问题后,我做了以下事情。1
.find image/* -mtime +356 | cpio -pd /target_dir
我得到了 0 个区块。

  1. find /full/path/to/image -mtime 365 -type f ( "-name *.jpg -o -name *.gif ) -execdir cp {} /full/path/to/image_target_dir/modified-last-year \;
  2. find /full/path/to/image -mtime 365 -type f -execdir cp {} /full/path/to/image_target_dir/modified-last-year \;
    没有复制任何内容。

    并且只需查找即可获取带或不带 -type f 的文件计数。

  3. find /full/path/to/image -mtime 365 -type f | wc -l
    我得到0。

    我可以验证图像目录和子目录中确实存在过去 1 年添加的文件。事实上应该有超过200张图像。

    [编辑2]
    我还必须从查找中排除一个目录,以便以下代码工作正常。

    感谢第一个答案,我能够创建这个。
    find /full/path/to/image/* -path /full/path/to/image/ignored_dir -prune -o -print -mtime -365 | cpio -pd /full/path/to/target_dir/modified-last-year

答案1

您可以cpio在直通模式下使用 find 和:

 find  image/ -mtime -365 | cpio -pd /target_dir

编辑:从查找路径中删除不必要的 * 。

答案2

如果您已经在目录中image,那么find image/* ...就会遇到麻烦。对于相对路径,可以使用find .(etc) 其中“.”。表示当前目录及其子目录树,或者更好的是,使用绝对路径:

$ find /full/path/to/imagedir -mtime -365 -execdir cpio -pdv {} /absolute/path/to/targetdir \;

如果您有适当的权限,上面的命令应该将最近 365*24 小时(今天之前)修改的所有文件复制到您的目标目录中,同时保留目录结构。

选项-execdir比 更安全-exec,执行相同的操作,但从找到所选文件的目录执行。

-type f \( "-name \*.jpg -o -name \*.gif \)您可以通过在上面的cmd中指定选项来进一步限制find正在解析的文件。

cpio 的选项是:

-p for passthrough (does not make an archive out of the set of dound files)
-d to preserve the directory structure
-v to visualize files being copied

查看 的手册页find,位于https://www.gnu.org/software/cpio/manual/cpio.html获取完整的cpio在线手册,并记住www.startpage.com是一个在你寻找答案时不会为你提供产品的朋友。

相关内容