具有两个或多个日期范围的文件名的bash表达式

时间:2015-02-05 18:06:33

标签: 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

并收到错误消息,指出“意外令牌log-201501附近的语法错误”

我想我做错了什么。捕获两个日期范围的表达式是什么?

1 个答案:

答案 0 :(得分:0)

Bash有很多语法,所以你不能只是在willy-nilly周围抛出括号和管道

shopt -s extglob
cp log-201501@(2[6-9]|3[0-1])*.gz /home/user/bin/Temp

请参阅https://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching

如果这太难以理解,请将其拆分

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