当前位置:  开发笔记 > 编程语言 > 正文

如何使此代码更短更正确?(搜索和复制文件)

如何解决《如何使此代码更短更正确?(搜索和复制文件)》经验,为你挑选了1个好方法。



1> mklement0..:

请尝试以下方法:

#!/usr/bin/env bash

directory=~/'somefolder'
DAYSAGO=8

find "$directory" -mtime -$(( DAYSAGO + 1 )) -type f -exec cp -t ~/'The other folder'/ {} +

使用-前缀-mtime参数对参数值应用小于逻辑.所有 find采用数字参数的测试都支持这种逻辑(以及它的对应物+,对于超过逻辑的逻辑).奇迹的帽子提示173.

因为期望的逻辑是<= $DAYSAGO,1使用一个算术扩展(添加$(( ... ))),以实现期望的逻辑(不用说,$DAYSAGO可以用被重新定义低于记逻辑,向9,以使算术扩展不必要).

使用-exec+终止子调用与(通常)指定的命令的所有匹配的文件名一次,这是比管道连接到壳循环更有效.

{}是匹配文件名列表的占位符,请注意,使用+必须是终结符之前的最后一个参数+(相比之下,使用invoke-once- for- each -matching-file终止符\;,{}可以放在任何位置).

需要注意的是上面的命令因此仅与工作cp支持实现-t选项,它允许将所述目标目录第一,值得注意的是,GNU cp(BSD/OSX cp和POSIX规范,相比之下,不支持-t).

另请注意引用的变化:

directory=~/'somefolder':单引号文字somefolder- 虽然在这种特定情况下并非绝对必要 - 确保包含的名称即使包含嵌入的空格或其他shell元字符也可以工作.

但是请注意,该~/部分必须保持不带引号~扩展到当前用户的主目录.

"$directory":对变量引用进行双引号确保它的值不会被shell进一步解释,从而可以安全地使用具有嵌入空格和其他shell元字符的路径.

~/'The other folder'/提供了一种更清晰的替代方案~/The\ other\ folder/(并且也更容易打字),展示了与上述相同的未引用和引用部分的组合.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有