在shell脚本中发出mv命令

我试图使用shell脚本运行mv命令,但它给了我

mv: cannot stat `/opt/logs/merchantportal/logger.log.20160501.*': No such file or directory mv: cannot stat `/opt/logs/merchantapi/logger.log.20160501.*': No such file or directory 

//这是我的shell脚本

 #!/bin/bash now="$(date +'%Y%m%d')" merchantPortalLogsPath="/opt/logs/merchantportal" merchantApiLogsPath="/opt/logs/merchantapi" currentDate="$(date +%Y%m%d)" olderDate="$(date "+%Y%m%d" -d "1 days ago")" merchantPortalLogsPathBackup=$merchantPortalLogsPath"."$olderDate merchantApiLogsPathBackup=$merchantApiLogsPath"."$olderDate mkdir $merchantPortalLogsPathBackup mkdir $merchantApiLogsPathBackup echo $merchantPortalLogsPath"/logger.log."$olderDate".*" $merchantPortalLogsPathBackup"/" echo $merchantApiLogsPath"/logger.log."$olderDate".*" $merchantApiLogsPathBackup"/" mv $merchantPortalLogsPath"/logger.log."$olderDate".*" $merchantPortalLogsPathBackup"/" mv $merchantApiLogsPath"/logger.log."$olderDate".*" $merchantApiLogsPathBackup"/" 

//但是目录是成功创build的

在这里输入图像描述

 ".*" 

*放在双引号内可以防止shell将其视为通配符,而将其视为文字*字符。 相反,改变你的脚本,使其不会双引号* 。 例如:

 mv ${merchantPortalLogsPath}/logger.log.${olderDate}.* ${merchantPortalLogsPathBackup}/ mv ${merchantApiLogsPath}/logger.log.${olderDate}.* ${merchantApiLogsPathBackup}/ 

注意:技术上应该实际上双引号变量扩展来处理空格和其他特殊字符的路径。 但是我并没有表明只关注眼前的问题。

是的日志目录存在,但这些目录的日志文件不。 由于MV不能移动不存在的日志文件,它抱怨。

注意: mv提供的错误信息(“没有这样的文件或目录”)是模糊的,可以说是错误的 – 如果它只说“没有这样的文件”(而不会让用户想知道是否有一个缺少的目录 )令人费解。