如何从所有目录中复制所有当前日期为文件名的xml文件

时间:2016-10-06 06:43:11

标签: bash unix sh

我想从所有目录中复制所有当前日期为文件名的xml文件。以下是我写的脚本。

#!/bin/bash
CURRENT_DATE=`date +'%d%m%Y'`
Temp_Path=/appinfprd/bi/infogix/IA83/InfogixClient/Scripts/IRP/New_Vendors/
FILE_PATH=/bishare/DLSFTP/DLSTREAM/
FILE_DATE=`date -d "-2 days" +"%Y%m%d"`
cd $FILE_PATH
find . -name '*$FILE_DATE*.xml' -exec cp $Temp_Path

但它没有用。

1 个答案:

答案 0 :(得分:0)

您的find声明错误。您应该以{{1​​}}结束它以指示\;命令的结束,并将exec放在命令中找到的文件名称的位置。所以,你想要:

{}

修改

正如评论中所述,您的初始帖子中也存在一个问题,您的单引号应该是双引号。您可能对this man page感兴趣。特别是这些部分:

  

-exec 命令;

     

执行命令;如果返回0状态,则返回true。在查找包含find . -name "*$FILE_DATE*.xml" -exec cp "{}" "$Temp_Path" \; 的参数之前,将查找所有后续参数作为命令的参数。字符串;将被处理命令参数中出现的任何位置处理的当前文件名替换,而不仅仅是在某些版本的find中的参数中。这两种结构都可能需要进行转义(使用{})或引用以防止它们被shell扩展。有关使用\选项的示例,请参阅“示例”部分。为每个匹配的文件运行一次指定的命令。该命令在起始目录中执行。围绕使用-exec存在不可避免的安全问题,您应该使用-exec action;选项。

     

-exec 命令 {} +

     

-execdir操作的此变体在所选文件上运行指定的命令,但命令行是通过在末尾附加每个选定的文件名来构建的;命令的调用总数将远远少于匹配文件的数量。命令行的构建方式与-exec构建命令行的方式大致相同。在命令中只允许xargs的一个实例,并且(当从shell调用find时)应该引用它(例如,{})以保护它不被shell解释。该命令在起始目录中执行。如果任何调用返回非零值作为退出状态,则find返回非零退出状态。如果find遇到错误,这有时会导致立即退出,因此可能根本不会运行某些挂起的命令。 '{}'的此变体始终返回true。