Linux shell批量删除指定目录下的所有目录的编程思路

简介:

应用场景:某个目录中存放着许多软件的源码压缩包,在部署完这些软件后,一定会生成许多没用的临时目录,可以通过脚本的方式删除该目录下所有的目录。当这个目录中存在着一些特殊名字的目录时,例如这些目录中有Linux系统所不支持的特殊字符“/”(这些文件通常有可能是Windows系统所支持的)或有目录名中有空格,那批量删除这些目录就会变得困难。

问题分析与解决办法:

问题1.当前工作目录中有一些重要的目录可能不想被删除

解决办法:排除这些目录即可

问题2.需要考虑一些特殊的目录名称,诸如“test dir”,“2015/03/11-log”,“下载”

解决办法:利用inode消除用户命名空间所带来的特殊性

背景知识:

inode是index node或information node的缩写,是一种特殊的结构用于存放文件的基本信息,这些信息包括文件的所有者、类型、访问权限和存放在磁盘中实际数据的位置。inode存放在每一个文件系统的inode表(inode table)中。

Index or Information Node. This is a structure containing the basic information about a file such as owner, type, access permissions and pointers to the actual data on the disk. Inodes are stored in the per filesystem inode table and are referenced through inode numbers. --http://www.linux-tutorial.info/modules.php?name=MContent&obj=glossary&term=inode

如果Linux系统经常与Windows系统中的磁盘或文件进行交互,建议安装mtools,此工具能在不挂载Windows磁盘格式磁盘的情况下,进行读写等操作。

Summary     : Programs for accessing MS-DOS disks without mounting the disks

Description : Mtools is a collection of utilities for accessing MS-DOS files.   
            : Mtools allow you to read, write and move around MS-DOS filesystem    
            : files (normally on MS-DOS floppy disks).  Mtools supports Windows95    
            : style long file names, OS/2 XDF disks, and 2m disks    
            :     
            : Mtools should be installed if you need to use MS-DOS disks

shell实例(核心步骤):

1
2
3
4
5
6
7
8
9
#!/bin/bash   
WORK_DIRECTORY_NAME=.    
EXCLUDE_DIRECTORY_NAME=python    
INODE_OF_EXCLUDE_DIRECTORY_NAME=$( ls  - id  $EXCLUDE_DIRECTORY_NAME | awk  '{print $1}' )    
INODE_OF_CURRENT_DIRECTORY_NAME=$( ls  -Fi $WORK_DIRECTORY_NAME |  grep  \/ |  awk  '{print $1}' )    
INODE_OF_REMOVE_DIRECTORY_NAME=$( echo  $INODE_OF_CURRENT_DIRECTORY_NAME |  sed  "s/$INODE_OF_EXCLUDE_DIRECTORY_NAME//g" )    
for  INODE  in  $INODE_OF_REMOVE_DIRECTORY_NAME;  do    
     find  $WORK_DIRECTORY_NAME -inum $INODE - exec  rm  -rf {} \;    
done


实际操作结果(仅演示效果不做具体操作):

image

--END--



本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1619310,如需转载请自行联系原作者


相关文章
|
5天前
|
存储 移动开发 Linux
Linux系统之部署h5ai目录列表程序
【5月更文挑战第3天】Linux系统之部署h5ai目录列表程序
17 1
|
1天前
|
网络协议 Shell Linux
LabVIEW 在NI Linux实时设备上访问Shell
LabVIEW 在NI Linux实时设备上访问Shell
|
1天前
|
Linux Shell
Linux操作系统下查找大文件或目录的技巧
Linux操作系统下查找大文件或目录的技巧
|
2天前
|
域名解析 Unix Linux
AIX上如何正确挂载Linux 的nfs共享目录分享篇
AIX上如何正确挂载Linux 的nfs共享目录分享篇
|
2天前
|
Shell Linux
【Linux】进程实践项目(更新中) — 自主shell编写
前几篇文章,我们学习进程的相关知识:进程概念,进程替换,进程控制。熟悉了进程到底是个什么事情,接下来我们来做一个实践,来运用我们所学的相关知识。这个项目就是手搓一个shell模块,模拟实现Xshell中的命令行输入。
9 1
|
3天前
|
监控 关系型数据库 Shell
Shell脚本入门:从基础到实践,轻松掌握Shell编程
Shell脚本入门:从基础到实践,轻松掌握Shell编程
|
3天前
|
Linux
在 Linux 中复制文件和目录
在 Linux 中复制文件和目录
|
3天前
|
Linux Shell C++
Linux 终端中的目录切换
Linux 终端中的目录切换
|
3天前
|
Shell Linux 信息无障碍
5 个有用的 Linux Shell 转义序列
5 个有用的 Linux Shell 转义序列
|
4天前
|
存储 算法 网络协议
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
12 0