【问题标题】:missing argument to -exec-exec 缺少参数
【发布时间】:2016-11-15 20:20:14
【问题描述】:

我遇到了一个 bash 命令返回以下错误的问题:

/usr/bin/find: missing argument to `-exec'

我正在运行的实际命令是:

/usr/bin/find /backup-directory/ -maxdepth 1 -type f -mtime +14 -printf "%f\n" -exec /usr/local/bin/aws s3 mv /backup-directory/{} s3://my-s3-bin/{}\;

目标是每晚从 crontab 调用此命令以搜索目录并使用 aws cli 将任何超过 14 天的文件移动到 Amazon S3。

find 命令在 -exec 之前一直正常工作,输出如下:

/usr/bin/find /backup-directory/ -maxdepth 1 -type f -mtime +14 -printf "%f\n"
20161030002947.Pg
20161029002644.Pg
20161027002705.Pg
20161028002402.Pg
20161031002440.Pg

只有带有显式文件名的 aws cli move 命令才能按预期工作:例如,以下命令会将 20161030002947.Pg 从本地备份目录移动到 s3 bin。

/usr/local/bin/aws s3 mv /backup-directory/20161030002947.Pg s3://my-s3-bin/20161030002947.Pg

当我将它们与 -exec 和 {} 参数放在一起时,我不知道为什么它会中断。

从完整路径调用所有内容的原因是确保从 crontab 调用命令时不会出现意外问题,并且此特定服务器上的操作系统是 Debian 8。

【问题讨论】:

    标签: bash amazon-web-services amazon-s3 gnu-findutils


    【解决方案1】:

    我建议更换

    {}\; 
    

    通过

    {} \;
    

    【讨论】:

    • 那至少让它执行,所以谢谢。但现在我得到了意想不到的结果。看起来它可能不尊重 -printf "%f\n"。 20161030002947.Pg 用户提供的路径/backup-directory//backup-directory/20161030002947.Pg不存在。 20161029002644.Pg 用户提供的路径/backup-directory//backup-directory/20161029002644.Pg不存在。
    • 我刚刚用 echo 替换了 aws 命令对此进行了测试,我一定对-printf "%f\n" 的作用有误解,因为完整路径仍在{} 中......这是带有 echo 的输出:find /backup-directory/ -maxdepth 1 -type f -mtime +14 -printf "%f\n" -exec echo /backup-directory/{} s3:/my-s3-bin/{} \; 20161030002947.Pg /backup-directory//backup-directory/20161030002947.Pg s3://my-s3-bin//backup-directory/20161030002947.Pg
    • Printf 写入标准输出。它不影响-exec。
    • Cron 对% 有一些不可思议的荒谬处理。最简单的解决方法是将命令放在 bash 脚本中并使用 cron 触发脚本。
    • 我能够通过使用sh -cbasename 以及上面的建议让它工作。因此,使用 aws cli 将满足查找条件的所有filenamesourcedir 移动到destinationbin 的简化示例版本将是:find /sourcedir/ -maxdepth 1 -type f -mtime +14 -exec sh -c 'aws s3 mv /sourcedir/$(basename $1) s3://destinationbin/$(basename $1)' find-sh {} \; ...这完全消除了对% 的需求,就像@987654335 @ 仅在您使用管道时才有效。我使用来自stackoverflow.com/questions/15627446/… 的信息来提供帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多