免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1518 | 回复: 6

压缩档案请教(档名内有 space的话) [复制链接]

论坛徽章:
0
发表于 2006-04-04 18:37 |显示全部楼层
现有一资料群组为: /AAAA/BBBB/****.[副档名]
执行下式为可行

find .   name “*.[副档名]" > file.LST
foreach item (`cat file.LST`)
     set file = `echo $item | cut -c 12-`;
     tar cf - $file | gzip -c > ${file}.tar.gz;
end


但若资料群组为: /AAAA/BBBB/字串A[空格]字串B[空格]字串C.[副档名]
, 请较如何可达到相同目标? 先谢谢了!

论坛徽章:
0
发表于 2006-04-05 11:55 |显示全部楼层

  1. find .   name “*.[副档名]" > file.LST
  2. while read item
  3. do
  4.      set file = `echo $item | cut -c 12-`;
  5.      tar cf - $file | gzip -c > ${file}.tar.gz;
  6. done<file.LST

复制代码

论坛徽章:
0
发表于 2006-04-06 11:09 |显示全部楼层

回复 2楼 philonis 的帖子

sorry 没说清楚问题!

如存在档案为
资料一:  /AAAA/BBBB/CCCC.sss
资料二:  /AAAA/BBBB/DDD[空格]EEE.sss

则 file.LST 正确没错, 会是
/AAAA/BBBB/CCCC.sss
/AAAA/BBBB/DDD[空格]EEE.sss

但是 foreach
不是执行二次 (CCCC.sss 与 DDD[空格]EEE.sss) ,
而是执行三次 (CCCC.sss 与 DDD 与 EEE.sss)

而想要的结果是
CCCC.sss.tar.gz 与
DDD[空格]EEE.sss.tar.gz

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2006-04-06 11:48 |显示全部楼层
foreach file ( /AAAA/BBBB/*.ext )
  set file = `echo $file |cut -c 12-
  tar cf "$file" ...
  ...
end
csh不太熟悉,改改用吧。
注意$file外面需要时要用双引号括起来。

论坛徽章:
0
发表于 2006-04-06 12:56 |显示全部楼层

回复 4楼 woodie 的帖子

已解决了, 不过方法很差,
就是先把 file.LST 的 [空格] 填上其它字元, 如 #,
再在 foreach 回圈中将 # 转换回 [空格]

倒是碰到原本档名就有 # 时, 则有问题就是了

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2006-04-06 13:15 |显示全部楼层
*直接*用统配符(glob)就可以避免文件名有空格的问题,程序也简单,你可以试一下。用命令替换是不行的,用#替换空格也是一种workaround,不过有点不够简洁优雅。^_^

论坛徽章:
0
发表于 2006-04-06 15:01 |显示全部楼层
没用过csh,不过在bash下,while read 是可以整行读的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP