我想从目录中查找过去 1 年添加的图像,并将它们复制到保留原始文件夹结构的新目录。
我正在使用 find 但它没有复制任何内容。有什么方法可以使用 1 行命令来完成吗?
find image/* -mtime +356 -exec cp {} modified-last-year/ \;
运行此命令时我位于图像目录中,并且我只想递归搜索图像文件夹。
[编辑]
回答完这两个问题后,我做了以下事情。1
.find image/* -mtime +356 | cpio -pd /target_dir
我得到了 0 个区块。
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 \;
和find /full/path/to/image -mtime 365 -type f -execdir cp {} /full/path/to/image_target_dir/modified-last-year \;
没有复制任何内容。并且只需查找即可获取带或不带 -type f 的文件计数。
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是一个在你寻找答案时不会为你提供产品的朋友。