当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]如何将文件归类(在线等候。。。)
帖子发表于 : 2008-05-07 11:06 

注册: 2008-03-22 1:19
帖子: 45
送出感谢: 0 次
接收感谢: 0 次
各位前辈,小弟刚学SHELL在这像各位请教一个问题。
以下是一些文件,我想建一个SHELL文件,让它自动把以下文件给归类。
规则如下:
例如:event2005/20051020214004/LQT.2005293214947.CHN
event2005/20051020214004/MAL.2005293214953.CHE
这两个文件,我要在/test中分别创建20052932149472005293214953这两个文件夹
然后把文件中含有和文件夹一样的名字的文件把他们分别都移进去。并同时除去文件中含有文件夹的名字。最后结果如下:/test/2005293214947/LQT.CHN
和/ test /2005293214953/MAL.CHE
请问要如何编写阿???

大家可以 以以下的文件名字为例编写:
event2005/20051020214004/LQT.2005293214947.CHN
event2005/20051020214004/MAL.2005293214953.CHE
event2005/20051020214004/MAL.2005293214953.CHN
event2005/20051020214004/MAL.2005293214953.CHZ
event2005/20051020214004/MLT.2005293214955.CHE
event2005/20051020214004/MLT.2005293214955.CHN
event2005/20051020214004/MLT.2005293214955.CHZ
event2005/20051020214004/NJT.2005293214938.CHE
event2005/20051020214004/NJT.2005293214938.CHN
event2005/20051020214004/NJT.2005293214938.CHZ
event2005/20051020214004/PZH.2005293214940.CHE
event2005/20051020214004/PZH.2005293214940.CHN
event2005/20051020214004/PZH.2005293214940.CHZ
event2005/20051020214004/QJT.2005293214944.CHE
event2005/20051020214004/QJT.2005293214944.CHN
event2005/20051020214004/QJT.2005293214944.CHZ
event2005/20051020214004/SMT.2005293214949.CHE
event2005/20051020214004/SMT.2005293214949.CHN
event2005/20051020214004/SMT.2005293214949.CHZ
event2005/20051020214004/THT.2005293214953.CHE
event2005/20051020214004/THT.2005293214953.CHN
event2005/20051020214004/THT.2005293214953.CHZ
event2005/20051020214004/TNC.2005293214928.CHE
event2005/20051020214004/TNC.2005293214928.CHN
event2005/20051020214004/YST.2005293214934.CHE
event2005/20051020214004/YST.2005293214934.CHN
event2005/20051020214004/YST.2005293214934.CHZ
event2005/20051020214004/YXT.2005293214939.CHE
event2005/20051020214004/YXT.2005293214939.CHN
event2005/20051020214004/YXT.2005293214939.CHZ
event2005/20051020214004/ZDT.2005293214925.CHE
event2005/20051020214004/ZDT.2005293214925.CHN
event2005/20051020214004/ZDT.2005293214925.CHZ
event2005/20051020214004/ZTT.2005293214947.CHE
event2005/20051020214004/ZTT.2005293214947.CHN
event2005/20051020214004/ZTT.2005293214947.CHZ
event2005/20051020214004/ZXT.2005293214952.CHE
event2005/20051020214004/ZXT.2005293214952.CHN
event2005/20051020214004/ZXT.2005293214952.CHZ


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-05-07 12:19 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
比较复杂,给几个提示:
for i in `ls` 可以循环目录中的文本文件.
mkdir 可以创建文件夹
处理字符串你可能要用到 sed 和 awk
移文件建议用cp复制先,确保正确再删除原来的.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-05-07 13:16 

注册: 2008-03-22 1:19
帖子: 45
送出感谢: 0 次
接收感谢: 0 次
就是我上面列的一堆文件,我想把他们按照各自文件名字中的中间名字(例如2005293214947)来归类。
比如说LQT.2005293214947.CHN 这个文件,我就想把它移到2005293214947这个文件夹中。然后移进去后就把文件名去掉2005293214947改为LQT.CHN


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-05-07 15:34 

注册: 2007-04-09 12:19
帖子: 119
送出感谢: 0 次
接收感谢: 0 次
文件名很有次序,所以是比较容易处理的。
今天时间不多,完整的脚本就不写出了,提供个思路。

1、用
代码:
for i in *
或者
代码:
for i in `ls`
取得当前目录下的文件名

2、用cut或者awk切割$i
取得目录名,也就是两个“.”之间那段,并把值赋予一个变量
代码:
d=`echo $i | cut -d . -f 2`

取得更改后的文件名,也就是第一段与第三段,并赋予一个变量
代码:
n=`echo $ i | cut-d . -f 1,3`


3、然后就是建立目录,把文件转移进去了
代码:
mkdir $d;mv $i $d/$n


4、当然,在这个中间,你可以用[ -d $d ]或者[ -e $d ]来判断目录是否已经被建立,如果已经被建立,就不要再建立了。不过不这么做,也没什么大关系,顶多效率低点,加上一大堆错误输出而已(笑)。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-05-07 20:17 

注册: 2008-03-22 1:19
帖子: 45
送出感谢: 0 次
接收感谢: 0 次
thword
楼上的真是太感谢你了,我觉得这年头热心人真多啊!感激,感激,相当感激!


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-05-07 23:28 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
有规律就简单的。


_________________
● 鸣学


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译