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实例(核心步骤):

#!/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--

时间: 2025-01-04 06:12:37

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

Python批量删除指定文件夹下的指定类型的文件

Python作为一种脚本语言,其非常适合文件级的各种操作.下面的代码可以批量删除指定文件夹下的全部特定类型(CSV类型)的文件. import sys, csv , operator import os import glob for i in range(0, 20): path = "C:\\Python34\\Folder_" + str(i) for infile in glob.glob( os.path.join(path, '*.csv') ): os.remove(in

Mac / Linux Shell 批量重命名的方法总览

Linux Shell 批量重命名的方法总览 0.用类似 GPRename 这样的图形软件进行批量重命名 1.删除所有的 .bak 后缀: rename 's/\.bak$//' *.bak 2.把 .jpe 文件后缀修改为 .jpg: rename 's/\.jpe$/\.jpg/' *.jpe 3.把所有文件的文件名改为小写: rename 'y/A-Z/a-z/' * 4.将 abcd.jpg 重命名为 abcd_efg.jpg: for var in *.jpg; do mv "$var

递归删除指定路径下的空目录

递归删除指定路径下的空目录: 注:如第一级目录要保留 vi a1.py #!/usr/bin/python import os dir="/root/python" os.chdir(dir) for f in os.listdir(dir):if os.path.isdir(f):p = open('/root/python/logs/py.log','a')p.write(os.path.join(dir,f)+"\n")p.close() g = open('

删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件

1 @echo off 2 ::删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件. 3 ::本例需要Win2003/Vista/Win7系统自带的forfiles命令的支持 4 rem 指定待删除文件的存放路径 5 set SrcDir=D:\ajaxtrain\web 6 rem 指定天数 7 set DaysAgo=0 8 rem 要删除的文件通配 9 set searchmast=*.html 10 set filename=D:\ajaxtrain\web\deletefil

linux/shell 文本文件删除/删掉空行

分别用sed awk perl grep 实现: 1 sed '/^$/d' input.txt > output.txt #output file: output.txt 2 sed -i '/^$/d' input.txt #output file: input.txt 3 awk 'NF > 0' input.txt > output.txt #output file: output.txt 4 perl -i.backup -n -e "print if /\S/&qu

shell 批量压缩指定文件夹及子文件夹内图片

shell 批量压缩指定文件夹及子文件夹内图片 用户上传的图片,一般都没有经过压缩,造成空间浪费.因此须要编写一个程序,查找文件夹及子文件夹的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理. 代码例如以下: #!/bin/bash # 查找文件夹及子文件夹的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理 # Config folderPath='/home/fdipzone/photo' # 图片文件夹路径 maxSize='1M' # 图片尺寸同意值 max

批量删除指定数据库中的指定表

-- ---------------------------------------------------------------------------------------------------------- -- -- 1.查询:得到批量删除指定数据库中的指定表: -- 2.执行:将得到的结果复制下来,再重新执行: -- SELECT CONCAT( 'drop table ', table_name, '; ' ) FROM information_schema. TABLES W

Windows 定时删除指定路径下N天前的日志文件

Windows 下bat脚本文件的内容为 1. 删除指定路径下5天前的所有文件 . @echo off set SrcDir=E:\WORK\Git set DaysAgo=5 forfiles /p %SrcDir% /s /m *.*/d -%DaysAgo% /c "cmd /c del /f /q /a @path" 2.删除指定路径下5天前的所有log文件 @echo off set SrcDir=E:\WORK\Git //指定的路径 :5天前 set DaysAgo=5 

删除指定路径下固定格式,以.log结尾、三天前的文件,或删除空的日志文件

师出‘百测’besttest 删除指定路径下固定格式,以.log结尾.三天前的文件,或删除空的日志文件. 日志文件格式:XXXX_2019-01-01.log. import os,datetime #判断文件是否为空,如果为空则删除 def del_file(file): with open(file,encoding='utf-8') as f: if f.read(): pass else: f.close() os.remove(file) #查找指定路径下xx结尾的文件 def sea