[英]Bash script to copy all files in current directory modified recently into a newly created folder elsewhere
其他一些细节:
这是我想出的:(全1行,为便于阅读而拆分)
mkdir ~/Desktop/$(date +%F-%T)
&& find . -mmin -20 -exec cp -r {} ~/Desktop/$(date +%F-%T) \;
&& echo "bash: cr: command not found"
我不喜欢通过再次获取日期和时间来指定副本的目标目录。
这是我第二次尝试以粗体显示的更改:
mkdir ~/Desktop/$(date +%F-%T)
&& find . -mmin -20 -exec cp -r {} **$(find ~/Desktop/ -type f -cmin -1)** \;
&& echo "bash: cr: command not found"
这次,我只是抓住不到一分钟前创建的桌面上的任何文件夹。 考虑到如果我在60秒内运行命令两次,它将失败,因为对我来说,“查找”(以粗体显示)将返回2个对cp命令无效的文件夹,这对我来说似乎仍然是一个较弱的解决方案...
现在,我面临的挑战是,如果当前目录为桌面,如何使这项工作正常? 我不想将新创建的文件夹复制到自身中! 另外,如何避免从cp获得任何其他输出? 有时我会收到警告/错误消息,告诉我我试图将文件复制到已经存在的相同位置!
任何其他实现此目的的方法都将受到欢迎,但我很好奇如何修改我的方法以使其正常工作
提前致谢!
只需遵循古老的编程格言:为多次使用的东西制作变量或函数。
folder="$(date +%F-%T)" \
&& mkdir "$HOME/Desktop/$folder" \
&& find -type d -name "$folder" -prune -o -type f -mmin -20 -exec cp {} "$HOME/Desktop/$folder" + \
&& echo "bash: cr: command not found"
另请注意,
find
已经是递归的,所以不要使用cp -r
-type f
+
而不是;
用于可以将多个文件作为参数的命令。 (它将运行cp file1 file2 file3 ... "$folder"
而不是单独的cp
命令,并最终运行尽可能少的cp
命令,将它们拆分到ARG_MAX
,并ARG_MAX
优化性能) -type d -name "$folder" -prune
,它将停止从名为"$folder"
降序目录中find
。 如果其他目录碰巧包含完全相同的名称,这可能会导致您的命令丢失某些其他目录,但否则它应能按预期工作。 (如果您始终从同一目录启动它,则可以对其进行改进以匹配确切路径,或者可以执行更复杂的-exec
检查,但是我认为这在大多数情况下应该可行)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.