编写个shell脚本将/usr/local/test目录下大于100K的文件转移到/tmp目录下
感觉这个脚本不对,然后能说出每一行的意思吗?麻烦给出正确的答案,感谢!
感觉这个脚本不对,然后能说出每一行的意思吗?麻烦给出正确的答案,感谢!
2016-10-07
如果不允许使用find,必须用脚本实现:
#!/bin/bash
ls -al /usr/local/test > ./temp.txt #将目录中的ls信息输出到temp.txt touch 1.txt move2tmp.txt #创建两个文件备用 sed 's/[[:space:]]\+/\*/g' ./temp.txt > 1.txt #将文件文本中的单个或连续空格替换为*,备用 for i in `cat 1.txt`;do declare -i size=`echo $i | awk -F'*' '{print $5}'` #通过*分割每一行中的内容 取出第五个字段(文件大小),也可以用cut -d if [ $size -gt 100000 ];then filename=`echo $i | awk -F'*' '{print $NF}'` #如果大小大于100k,取得其文件名 mv $filename /tmp #将该文件移到tmp目录下 echo $filename>>move2tmp.txt #记录移动的文件 else continue fi done rm -f 1.txt biglog.txt temp.txt #删除用过的临时文件,保留文件移动移动记录move2tmp.txt
用find命令是个好方法,这里学习了,
不过如果是仅仅查找/usr/local/test目录而不查找其内的字目录的话,则不建议用find命令,因为find命令是在目录结构中搜索文件和目录,并执行指定的操作,也就是说find会对目录内的所有文件和目录及其字目录进行全部搜索,则如楼上所说的用find则会对/usr/local/test目录及其字目录字字目录都进行查找出大于100k的文件然后都进行移动到/tmp。
举例如下,
[root@rhel7 test]# ll -h
total 1.5M
drwxr-xr-x. 3 root root 61 Feb 13 20:56 abrt
-rw-r--r--. 1 root root 32K Feb 13 20:43 meta.db-shm
-rw-r--r--. 1 root root 1.4M Feb 13 20:43 meta.db-wal
drwxr-xr-x. 2 root root 4.0K Feb 13 20:43 tracker
[root@rhel7 test]# find ./ -size 100k
[root@rhel7 test]# find ./ -size 100k -type f
[root@rhel7 test]# find ./ -size 100k -type f -pint
find: unknown predicate `-pint'
[root@rhel7 test]# find ./ -size 100k -type f -print
[root@rhel7 test]# find ./ -size +100k -type f
./meta.db-wal
./tracker/meta.db
./tracker/meta.db-wal
./tracker/ontologies.gvdb
举报