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

时间:2015-12-17 20:26:15

标签: bash

此代码在上述日期之后搜索并递归复制文件。

userPlaces.append(["name":"Schule", "subname":"Wien", "lat":"48.203015", "lon":"16.374419" ])

2 个答案:

答案 0 :(得分:5)

尝试以下方法:

#!/usr/bin/env bash

directory=~/'somefolder'
DAYSAGO=8

find "$directory" -mtime -$(( DAYSAGO + 1 )) -type f -exec cp -t ~/'The other folder'/ {} +
  • 使用-作为-mtime参数的前缀,将 less-than 逻辑应用于参数值。 所有采用数字参数的 find测试都支持此逻辑(及其对应的+,用于多于逻辑)。 提示miracle 173
    • 由于所需的逻辑是<= $DAYSAGO,因此使用算术扩展(1)添加$(( ... )),以实现所需的逻辑(不用说,$DAYSAGO可能是重新定义时考虑到逻辑小于9,以便不必进行算术扩展。
  • -exec+终结符一起使用(通常)所有匹配文件名一次调用指定的命令,这是比套管回路更有效率。

  • {}是匹配文件名列表的占位符,请注意,对于+必须 参数在+终结符之前(相比之下,使用invoke-once-for-每个匹配文件终止符\;{}可以放在任何地方)

    • 请注意,上面的命令仅适用于支持cp选项的-t实现,这允许将目标目录放在,特别是 GNU <相反,/ em> cp(BSD / OSX cp和POSIX规范不支持-t。)
  • 另请注意引用中的更改:

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

      • 但请注意,~/部分必须 DIR。
    • ~:对引用引用进行双引号确保它的值不会被shell进一步解释,从而可以安全地使用具有嵌入空格和其他shell元字符的路径。

    • "$directory"~/'The other folder'/提供了更清晰的替代方式(并且也更容易打字),展示了与上述相同的未引用和引用部分组合。

答案 1 :(得分:1)

根本不需要while循环。使用它会让您遇到一些极端情况的问题,例如包含换行符和其他空格的文件名。只需使用-exec主要内容。

find "$directory" -mtime "$a" -type f -exec cp {} -t ~/The\ other\ folder/ \;

更新:尽管使用mklement0's answer;它的效率更高。