免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1681 | 回复: 6
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 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
3 [报告]
发表于 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
4 [报告]
发表于 2006-04-06 11:48 |只看该作者
foreach file ( /AAAA/BBBB/*.ext )
  set file = `echo $file |cut -c 12-
  tar cf "$file" ...
  ...
end
csh不太熟悉,改改用吧。
注意$file外面需要时要用双引号括起来。

论坛徽章:
0
5 [报告]
发表于 2006-04-06 12:56 |只看该作者

回复 4楼 woodie 的帖子

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

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

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

论坛徽章:
0
7 [报告]
发表于 2006-04-06 15:01 |只看该作者
没用过csh,不过在bash下,while read 是可以整行读的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP