我想从所有目录中复制所有当前日期为文件名的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
但它没有用。
答案 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。