Auto classification Example
Created Thursday 03 April 2014
So,we can we up.
刚刚接触Shell,突然想到自己的Download目录是默认下载目录,每次不同类型文件放在一个文件夹下看起来很乱,ls 一下眼睛都晕了,突发奇想试一试做个格式分类的,例如zip格式放同一个目录下,xx格式放xx目录下,手动mv太麻烦了类似人的节奏。于是试一试。因为系统刚换文件不多,部分文件为touch出来...由于Shell水平太菜了见笑了。
Shell Version Code
#/bin/bash LUJING=$1 #代表要整理的目录 echo $# # $#表示参数个数,和下面函数无关,纯属看看而已 #定义移动文件的函数。 function move_file() { #3个参数,第一个参数是路径,第二个参数的文件类型,第三个是想起的目录名称 file_name=$1 file_type=$2 dir_name=$3 #下面用grep 判断类型后缀在不在文件名中,例如 .txt 在不再myname.txt这个名称中 echo $file_name | grep -q $file_type if [ $? -eq 0 ];then #如果grep找到了,就有个EXITVALUE=0,说明找到了,没有就等于1 #$? 表示上一个命令的结束的EXITVALUE值,成功为0,失败为1 if [ ! -d $LUJING/$dir_name ];then #判断是否已经存在目录,不存在就建 mkdir -p $LUJING/$dir_name fi #移动文件到文件夹,OK了 mv -fv $LUJING/$i $LUJING/$dir_name/ fi } for i in `ls $LUJING` { #判断是不是文件 if [ -f $LUJING/$i ];then #还不会截取后面的,只能有grep方法查找了。定义成函数了直接调用就好 move_file $i ".pdf" "PDF" move_file $i ".exe" "EXE" move_file $i ".epub" "EPUB" move_file $i ".zip" "ZIP" move_file $i ".tar.gz" "TAR_GZ" move_file $i ".iso" "ISO" move_file $i ".7z" "_7z" move_file $i ".jpg" "Pic" move_file $i ".rpm" "RPM" move_file $i ".txt" "TXT" move_file $i ".html" "HTML" #其他的放入未分类 move_file $i "." "NotClassFile" fi }
effect:
[yg@localhost Downloads]$ ls 4df3c207e5ba15f649b7ee55de422d5c.jpg README 590896715b45fe09c8b801132a9b367a.jpg readme.txt dadffe.tar.gz test.txt goagent-goagent-v3.1.6-70-gc761281.zip xx.pdf Linux Shell Scripting Tutorial v2.0.pdf zimlib-devel-1.0-6.fc20.x86_64.rpm ok.txt [yg@localhost Downloads]$ ~/Shell/example/auto_extract.sh . [yg@localhost Downloads]$ ls Linux Shell Scripting Tutorial v2.0.pdf NotClassFile PDF Pic RPM TAR_GZ TXT ZIP [yg@localhost Downloads]$ tree -L 2 . . ├── NotClassFile │ └── README ├── PDF │ ├── linux_shell_scripting.pdf │ └── xx.pdf ├── Pic │ ├── 4df3c207e5ba15f649b7ee55de422d5c.jpg │ └── 590896715b45fe09c8b801132a9b367a.jpg ├── RPM │ └── zimlib-devel-1.0-6.fc20.x86_64.rpm ├── TAR_GZ │ └── dadffe.tar.gz ├── TXT │ ├── ok.txt │ ├── readme.txt │ └── test.txt └── ZIP └── goagent-goagent-v3.1.6-70-gc761281.zip
Python Version Code
#/bin/python #-*-coding:utf-8-*- import os import shutil #高级文件操作的模块,要用到他的copy方法 from sys import argv #参数2是dir路径 script,dir_path = argv #先把dir_path拆分了,拆分了有'',''这种怎么办?要去掉,如["","home","yg",""] dir_path_list = dir_path.split("/") dir_path_list.pop() #把最后一个''元素删除 #得到file的list dir_list = os.listdir(dir_path) def remove_file(file_path,file_type): #字典包含了类型对应应该其的文件名 type_dict ={".txt":"TXT",".gz":"TAR_GZ",".zip":"ZIP",".rpm":"RPM",".pdf":"PDF",".jpg":"Pic"} #判断在不再字典里,在就取那个名字,不再就拉到用Unknow dir_list = dir_path_list[:] #依然把路径复制过来 if type_dict.has_key(file_type): dir_list.append(type_dict[file_type]) want_dir = "/".join(dir_list) else: dir_list.append("Unknow") want_dir = "/".join(dir_list) #没有目录经创建吧 if not os.path.exists(want_dir): os.mkdir(want_dir) print "no have path %s and creat now...,ok:" % (want_dir) #开始复制过去 shutil.copy(file_path,want_dir) os.remove(file_path) print "%s --> %s " % (file_path,want_dir) #判断dir_List中是目录还是文件 for i in dir_list: #p_list = dir_path_list #会不停的叠加,相当与两个指向一内存地址的指针,不能这样用 p_list = dir_path_list[:] #通过切片复制一个list p_list.append(i) file_all_path = "/".join(p_list) #得到了文件或者目录的完整路径了, #接下来开始判断目录还是文件 if os.path.isdir(file_all_path): pass elif os.path.isfile(file_all_path): #判断文件类型 ,用os.path.splitext方法,ext_type例如是.txt .gz .bin dir_root,ext_type = os.path.splitext(file_all_path) #已经可以判断最后一个类型了.txt了,下面就开始复制 remove_file(file_all_path,ext_type)
effect:
作者:YangGan
出处:http://blog.youkuaiyun.com/incyanggan
本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).