请尝试以下方法:
#!/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/
(并且也更容易打字),展示了与上述相同的未引用和引用部分的组合.