Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有两个或多个日期范围的文件名的bash表达式_Bash - Fatal编程技术网

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

具有两个或多个日期范围的文件名的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附近的语法错误” 我想我做错了什么。捕获两个日期范围的表达

我试图在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附近的语法错误”


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

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的新手,这让我非常感谢您!