用于移动带有通配符的变量字符串(文件)的Bash脚本

时间:2017-02-09 12:27:04

标签: linux bash shell

我想就下面的脚本提出一些帮助:

#!/bin/bash

year=$(date +%Y)
lastyear=$((year-1)) 
month=$(date +%m)
log="$lastyear$month"

mkdir -p "/root/temp/$lastyear" 
mkdir -p "/root/temp/$lastyear/$month"
cd /root
mv -f "*$log*" "/root/temp/$lastyear/$month"

错误提示

mv: cannot stat `*201602*': No such file or directory

我的目标是将文件名中包含特定“201602”字符串的所有文件移动到特定位置。 示例日志文件为OUTXXX-201602XXXINXXX-201602XXX201602XXXX

这将通过crontab实现,因为有大约500k +日志文件要传输,使用find会收到太多的参数错误T_T。

任何建议都会有所帮助!

1 个答案:

答案 0 :(得分:0)

你必须将引号字符放在引号之外才能解释它们。

尝试改为:

mv -f *"$log"* …

shell仍会将结果匹配保留为一个单词,所以即使文件名有空格也没问题。