Linux shell批量删除指定目录下的所有目录的编程思路
来源:互联网 发布:淘宝网广场服装夽女士 编辑:程序博客网 时间:2024/06/05 19:32
应用场景:某个目录中存放着许多软件的源码压缩包,在部署完这些软件后,一定会生成许多没用的临时目录,可以通过脚本的方式删除该目录下所有的目录。当这 个目录中存在着一些特殊名字的目录时,例如这些目录中有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实例(核心步骤):
#!/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
实际操作结果(仅演示效果不做具体操作):
--END--
- Linux shell批量删除指定目录下的所有目录的编程思路
- NO.48 删除某目录下所有指定名称的目录(比如批量删除.svn目录)
- shell批量删除指定目录下的文件
- shell-删除目录下指定日期前的所有文件
- linux下递归删除目录下所有指定的文件
- Linux批量删除.svn目录的shell
- NO.49 删除某目录下所有指定名称的文件(比如批量删除vssver.scc)
- 删除指定目录下的所有文件包括目录
- shell 删除指定目录下过时的文件或目录
- linux 删除目录下所有指定文件
- C# 删除指定目录下的 所有指定文件、文件夹
- Linux下面删除指定目录下非指定文件的所有文件
- Shell编程面试题3_批量修改某一目录下的所有文件名
- 批量删除一个目录下所有的文件夹和文件
- 批量删除SVN项目目录下的所有.svn文件
- 删除指定目录下的所有文件的java类
- 删除指定目录下的所有文件的java类
- 删除指定目录下的所有文件的java类
- 天声人語 20150327
- HTML 4.01 符号实体
- 如何看待蒂姆·库克在苹果的地位
- iOS7,修改SearchBar背景色
- JVM并发机制探讨—内存模型、内存可见性和指令重排序
- Linux shell批量删除指定目录下的所有目录的编程思路
- java读取单个文件内容
- delphi与sqlite实例
- 日经春秋 20150327
- 外企应了解财税本地化技术(金税三期|批量开票|金税接口|自动开票等技术及理念)
- java web 静态资源访问配置
- new module add in with lots of issues(part 1)
- 时间复杂度O(n)什么意思
- iOS开发UI篇—多控制器和导航控制器简单介绍