具有两个或多个日期范围的文件名的bash表达式
我试图在unix中对一组日志文件执行操作。操作是复制 假设我想将上周的日志文件(1月25日至31日)从当前目录复制到另一个目录,这些文件的名称如下:具有两个或多个日期范围的文件名的bash表达式,bash,Bash,我试图在unix中对一组日志文件执行操作。操作是复制 假设我想将上周的日志文件(1月25日至31日)从当前目录复制到另一个目录,这些文件的名称如下: log-20150125, log-20150126, ..., log-20150131 我在bash中尝试了以下操作: cp (log-201501)|2[5-9]|3[0-1]*.gz /home/user/bin/Temp 并得到一个错误,上面写着“意外令牌日志-201501附近的语法错误” 我想我做错了什么。捕获两个日期范围的表达
log-20150125, log-20150126, ..., log-20150131
我在bash中尝试了以下操作:
cp (log-201501)|2[5-9]|3[0-1]*.gz /home/user/bin/Temp
并得到一个错误,上面写着“意外令牌日志-201501附近的语法错误”
我想我做错了什么。捕获两个日期范围的表达式是什么 Bash有很多语法,所以你不能随意抛出括号和管道
shopt -s extglob
cp log-201501@(2[6-9]|3[0-1])*.gz /home/user/bin/Temp
看
如果这太令人费解了,那就把它分开
cp log-2015012[6-9]*.gz log-2015013[0-1]*.gz /home/user/bin/Temp
或者大括号扩展是可读的
cp log-201501{26,27,28,29,30,31}*.gz /home/user/bin/Temp
这就是shell路径名扩展(使用通配符)。这不符合regex规则,先生,你是我的英雄!我还是unix的新手,这让我非常感谢您!