在Linux下怎么一次性删除掉那些修改时间为指定日期的所有文件?

问:在Linux下怎么一次性删除掉那些修改时间为指定日期的所有文件?

 

答:脚本del_files_of_date.sh

用法:./del_files_of_date.sh <YYYY-mm-dd> <files...>

比如:./del_files_of_date.sh 2011-09-01 html/*.html

#!/bin/sh

: ${2?"usage: $0 <YYYY-mm-dd> <files...>"}

for f in "${@:2}"
do
        modify_time=$(stat --printf '%y' "$f")
        if [[ $modify_time == $1* ]]; then
                echo "$f" "$modify_time"
                rm -v -- "$f"
        fi
done

 

下面是此脚本的一次执行示例

[root@jfht contents]# ./del_files_of_date.sh 2011-08-01 html/*.html
html/0041bb66458751c989fe55d8dd837458.html 2011-08-01 08:55:58.000000000 +0800
已删除“html/0041bb66458751c989fe55d8dd837458.html”
html/05602e464e720e482fe0a33ac71198ea.html 2011-08-01 12:55:33.000000000 +0800
已删除“html/05602e464e720e482fe0a33ac71198ea.html”
……
……
html/ff4dd248f7f6b97bc07519d561d47111.html 2011-08-01 18:55:37.000000000 +0800
已删除“html/ff4dd248f7f6b97bc07519d561d47111.html”
[root@jfht contents]#

 

下面详细解释此脚本

 

第3行:: ${2?"usage: $0 <YYYY-mm-dd> <files...>"}

 

内建命令:(冒号),用来做参数扩展。如果没有,那么就会把后面${2...}的结果当做命令来执行。

man : 写道
: [arguments]
     No effect; the command does nothing beyond expanding arguments and performing any specified redirec-
tions. A zero exit code is returned.

 

[root@jfht contents]# touch 1.txt
[root@jfht contents]# ./del_files_of_date.sh 2011-09-01 1.txt
./del_files_of_date.sh: line 3: 1.txt: command not found

上面这行是没有在前面增加:命令的执行效果。
1.txt 2011-09-01 19:56:46.000000000 +0800
[root@jfht contents]#

 

(关于:命令的更多信息,参见“我使用过的Linux命令之:(冒号) - 啥也不做(除了……) ”)

 

第3行:: ${2?"usage: $0 <YYYY-mm-dd> <files...>"}

 

${VAR?STRING}的作用是判断变量VAR是否为空,如果为空则打印STRING指定的信息后退出。

这很适合用来检查是否提供了足够多的命令行参数或者变量是否设置,如果为否,打印使用帮助退出。

其中,?前的2,表示是第二个命令行参数。即第二个命令行参数没有设置,就打印帮助信息退出。

 

[root@jfht contents]# ./del_files_of_date.sh
./del_files_of_date.sh: line 3: 2: usage: ./del_files_of_date.sh <YYYY-mm-dd> <files...>
[root@jfht contents]# ./del_files_of_date.sh 2011-09-01
./del_files_of_date.sh: line 3: 2: usage: ./del_files_of_date.sh <YYYY-mm-dd> <files...>
[root@jfht contents]#

 

第5行:for f in ${@:2}

 

在Bash中for结构的写法

for VAR in LIST

do

    DO_SOMETHING_OF_VAR

done

 

(关于 for 语句的更多信息,参见“我使用过的Linux命令之for - Bash中的For循环 ”)

 

第5行:for f in "${@:2}"

 

关于 ${@:2},其中 @ 是代表所有命令行参数,2表示从第二个参数开始的所有参数。

更通用的情况:${@:START:N},表示从第START个参数开始,截取N个参数。

 

要注意的是${@:2}必须写在双引号里面。

如果去掉双引号,将不能正确处理带有空格的文件名,如下所示:

 

[root@jfht contents]# ./del_files_of_date.sh 2011-09-03 'hello world.txt'
stat: 无法 stat “hello”: 没有那个文件或目录
stat: 无法 stat “world.txt”: 没有那个文件或目录

以空格分隔成文件名,显然不是期望的结果。
[root@jfht contents]#

 

加上双引号的处理情况:

[root@jfht contents]# ./del_files_of_date.sh 2011-09-03 'hello world.txt'
stat: 无法 stat “hello world.txt”: 没有那个文件或目录
[root@jfht contents]#

 

第7行:modify_time=$(stat --printf '%y' "$f")


关于 $(),把其中的内容当做命令行执行,把标准输出保存到字符串中。

也可以用一对反引号来实现,写作 modify_time=`stat --printf '%y' "$f"`

 

第7行:modify_time=$(stat --printf '%y' "$f")

 

$(stat --printf '%y' "$f") 用来输出指定文件$f的修改时间(如 2011-09-01 10:26:04.000000000 +0800)。

stat用来打印文件的相关信息的,比如大小、修改时间、访问时间等。

开始时我采用的参数是--format,后面改用--printf更好些。

 

man stat 写道
-c --format=FORMAT
    use the specified FORMAT instead of the default; output a newline after each use of FORMAT

--printf=FORMAT
    like --format, but interpret backslash escapes, and do not output a mandatory trailing newline. If you
want a newline, include \n in FORMAT.

The valid format sequences for files
       %y     Time of last modification

 

(关于 stat 命令的更多信息,参见“我使用过的Linux命令之stat - 显示文件或文件系统状态 ”)

 

第8行:if [[ $modify_time == $1* ]]; then

 

在Bash中 if 结构的写法 如下

if CONDITION; then

   DO_SOMETHING

fi

 

如果 DO_SOMETHING 部分的语句很少,也可写作

if CONDITION; then DO_SOMETHING; fi

但别忘了在 fi之前加上分号,否则 Bash解析的时候不知道命令是否结束了。

 

(关于 if 语句的更多信息,参见“我使用过的Linux命令之if - Bash中的条件判断语句 ”)

 

第8行:if [[ $modify_time == $1* ]]; then

 

关于 [[ ]],在Bash中 [[ 是个内建命令。 与 [ ] 不同的是,可以不用双引号把变量引用起来,而且支持通配符模式的匹配。

[[ $modify_time == $1* ]]  表示modify_time是以第1个命令行参数开头。

 

help [[ 写道
[[ ... ]]: [[ expression ]]
Returns a status of 0 or 1 depending on the evaluation of the conditional
expression EXPRESSION. Expressions are composed of the same primaries used
by the `test' builtin, and may be combined using the following operators

( EXPRESSION ) Returns the value of EXPRESSION
! EXPRESSION True if EXPRESSION is false; else false
EXPR1 && EXPR2 True if both EXPR1 and EXPR2 are true; else false
EXPR1 || EXPR2 True if either EXPR1 or EXPR2 is true; else false

When the `==' and `!=' operators are used, the string to the right of the
operator is used as a pattern and pattern matching is performed. The
&& and || operators do not evaluate EXPR2 if EXPR1 is sufficient to
determine the expression's value.
 

第10行:rm -v -- "$f"


rm命令用于删除文件。增加 -v 参数,可以打印删除的文件信息。增加 -- 参数,是为了正确的处理 $f 以 - 开头的情况。

man rm 写道
-v, --verbose
     explain what is being done

To remove a file whose name starts with a ‘-’, for example ‘-foo’, use one of these commands:
              rm -- -foo
              rm ./-foo
 

(关于 rm 命令的更多信息,参见:“我使用过的Linux命令之rm - 删除文件或目录 ”)

 

 

本文链接:http://codingstandards.iteye.com/blog/1163913   (转载请注明出处)

 

PS: 第5到12行完全可以精简为一行。

脚本 del_files_at_date.sh

#!/bin/sh

: ${2?"usage: $0 <YYYY-mm-dd> <files...>"}

for f in "${@:2}"; do [[ $(stat --printf '%y' "$f") == $1* ]] && rm -v -- "$f"; done

 

[root@jfht contents]# ./del_files_at_date.sh
./del_files_at_date.sh: line 3: 2: usage: ./del_files_at_date.sh <YYYY-mm-dd> <files...>
[root@jfht contents]# touch test1.txt 'test space.txt'
[root@jfht contents]# ./del_files_at_date.sh 2011-09-02 test*.txt
已删除“test1.txt”
已删除“test space.txt”
[root@jfht contents]#

 

 

深度理解嵌入(embedding)层 首先从one_hot开始: one_hot的优点:计算方便快捷、表达能力强。 one_hot的缺点:过于稀疏,过于占用资源,尤其是在数据量特别大时;数据之间完全独立。 阅读详情

相关推荐

blenderproc 制作位姿估计数据集

blenderproc 制作位姿估计数据集 准备工作 1.首先需要去下载blenderproc的源码blenderproc,按照作者的readme文件进行编译。 2.其次需要下载bop_toolkit源码,链接如下bop_toolkit 3.说明:blenderproc主要用来生成数据,包括depth,rgb,位姿标签文件(scene_gt.json),bop_toolkit主要用来生成mask和mask_visib,scene_gt_info.json,用于判断物体的可见区域比例,如果遮挡太多考虑去掉。做

qq_43814359的博客 5697

Linux做脚本定时任务清除日志

Linux做脚本定时任务清除日志 1:定时任务 linux 系统是由 cron 这个服务来控制的。 cat /etc/crontab cron 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,cron进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 Linux下的任务调度分为两类,系统任务调度和用户任务调度。 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系.

慕菲烟*云的博客 1044

炉石传说游戏系统拆解和部分系统分析

一.游戏综述 《炉石传说:魔兽英雄传》是一款由暴雪娱乐公司出品的策略类卡牌游戏。中国大陆地区的独家运营由网易公司代理。2014年3月13日全球同步正式运营。游戏背景设定于暴雪的魔兽系列,共十位魔兽中的角色作为十种不同的职业。而玩家要做的,就是根据己方现有的卡牌组建合适的卡组,指挥英雄,驱动随从,施展法术,与游戏好友或素不相识的对手一决高下。 二.游戏系统拆解图 三.游戏系统部分分析 1. 对战系统 (1)战斗准备 炉石传说开始前都需要配置至少30张卡牌作为出战卡组 .....

Jimmy72236的博客 4922

docker基础笔记+工作经验

文章目录一、Docker基础1.1 Docker出现1.2 Docker 理念:1.3 Docker安装1.3.1 下载docker repo镜像源1.3.2 清理repo缓存1.3.3 安装docker1.3.4 启动docker1.4 Docker的基本组成1.5 底层原理1.6 Docker常用命令镜像命令容器命令运维常用命令:1.7 Docker镜像二、工作使用2.1 DockerFile解析2.3 Dockerfile构建过程解析2.4 小总结2.5 Dockerfile常用保留字指令2.6 案例

m0_49929446的博客 1624

联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法

本文详细介绍了ThinkPad声卡驱动安装的全流程,从硬件识别到驱动获取、安装技巧及深度排错。涵盖E470到X1 Carbon等不同机型的通用解法,帮助用户解决音频驱动问题,提升使用体验。重点讲解了声音驱动的精准识别和安装策略,确保系统稳定运行。

weixin_29207439的博客 708

深度学习暑期科研项目(两个月发EI论文)

对本科生而言,越早接触系统的科研训练开始上手科研项目,就越能在未来的升学求职中占据很大的优势。暑假是提升个人简历、丰富科研经历的最佳时期!哈尔滨工业大学博士师兄也会在8月1日开始带大家上手科研项目,并撰写发表EI会议论文。

Magnolia_He的博客 1441

使用linux的shell编程实现对用户的增删改查

用shell编程来实现对系统用户的增删改查 目录结构说明 1.txt文件是用来存储错误的命令或者正确的命令的,用来保持控制台的美观 add.sh是用来添加用户的,这里可以简单的添加,也可以复杂的添加,可以指定用户组家目录,使用的shell和描述信息 del.sh是用来删除用户的 hasUser.sh是用来判断用户是否存在的 import.sh是用来批量导入用户的 passwd.sh是用来存储用户的密码的,在进行其他操作时,用户的相关值也会发生改变 select.sh是用来显示用户的 update...

ksyjwq的博客 1456

SDU CS 期末考回忆版合集

删除原有分散的版本,合订起来画个。包括:机器学习、算法、图形学、操作系统、编译原理、软件工程、大数据分析管理、计算机体系结构等。

https://github.com/ZhaoyungZhang 6648

linux下sh脚本定时删除文件

一、sh脚本如下: #!/bin/sh location="/home/sharedir/" find $location -mtime +30 -type f |xargs rm -f 保存命名为del.sh 另外两种查找相关文件的方法如下: 1)find  /home/sharedir/  -mtime +30 -type f -name *.gz 2)find  /home/s

loveheronly的专栏 1万+

PHP实战:5分钟搞定SM4国密加密算法集成(附完整代码)

本文提供了一份可直接用于生产环境的PHP SM4国密加密算法集成实战指南。文章详细解析了SM4算法核心,对比了ECB与CBC工作模式,并给出了包含完整代码、密钥管理、数据填充及性能优化的解决方案,帮助开发者快速、安全地在PHP项目中集成国密加密算法。

2a4s6d8f0g的博客 339

mbed驱动st7789屏幕-硬件选择及连接(1)

在单片机项目中,交互性至关重要,而视觉感知是用户交互的直接体现。本期专栏介绍了如何使用mbed平台驱动ST7789型号的TFT屏幕,以显示字符、汉字和图像。由于针对STM32L432KC的mbed驱动库尚未完整,作者自行编写了一个基于mbed的ST7789屏幕驱动库,并将在专栏中提供全代码及使用指南。

weixin_64524066的博客 391

Linux根据时间删除文件或目录

执行完后,再次通过ls -l --time-style="+%Y-%m-%d %H:%M:%S" /home命令查看/home目录下的文件和目录,可以发现90天之前的文件和目录被删掉了。下面我做一些补充,讲述一个具体例子。以删除/home目录下的文件为例。通过date命令可以查看到当前系统时间是2024年3月28日。按照年月日时分秒的形式显示/home目录下的文件和目录。》已经讲述了根据时间删除文件或目录的方法。如果报错:遗漏“-exec”的参数。

崔杰城的博客 4706

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

【YOLO11改进 - 注意力机制】SCSA通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 473

linux根据修改日期删除,在Linux下怎么一次性删除掉那些修改时间为指定日期的所有文件?...

问:在Linux下怎么一次性删除掉那些修改时间为指定日期的所有文件?答:脚本del_files_of_date.sh用法:./del_files_of_date.sh 比如:./del_files_of_date.sh 2011-09-01 html/*.html#!/bin/sh: ${2?"usage: $0 "}for f in "${@:2}"domodify_time=$(stat ...

weixin_33069291的博客 683

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

linux删除一天前的目录,linux中删除指定日期之前的文件

要删除系统中就的备份文件,就需要使用命令了: #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; 假如在一个目录中保留最近30天的文件,30天前的文件自动删除 #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} \; /tmp --设置要删除系统中就的备份文...

weixin_36257799的博客 3944

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Linux中删除指定日期之前的文件(删除日志可用)

转自:http://soft.chinabyte.com/os/412/12594912.shtml 要删除系统中就的备份文件,就需要使用命令了:   #find /tmp -mtime +30 -type f -name *.sh[ab] -exec rm -f {} ;   假如在一个目录中保留最近30天的文件,30天前的文件自动删除   #find /tmp -mtime ...

一无是处的靓仔 4965

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

linux删除掉.c文件,Linux环境下用C++删除指定文件

Linux环境下用C++删除指定文件”Talk is cheap, show me the code!“#include #include #include #include #include #include #include #include #include using namespace std;const long day = 86400;//获取文件的给更新时间long get_fil...

weixin_32263417的博客 704

linux的命(修改密码)(修改时间、时区)(查看文件类型,普通、目录文件的创建与删除)

linux的命(修改密码)(修改时间、时区)(查看文件类型,普通、目录文件的创建与删除)

2402_88122400的博客 1492

linux将文件的时间记录改为,Linux下修改文件创建时间(修改文件更改时间)

Linux下修改文件创建时间(修改文件更改时间)进到要改的文件目录里find . -name “*” -exec touch ‘{}’ \;注:最后一定要加分号,{}外一定要加单引号,*表示所有的文件(. 代表当前目录下)如果只修改单个文件1.创建文件 touch tm //名字随便起2.touch -r tmliunx-2.6.30.4(要改的文件名)//就是把Linux-2.6.30.4文件的...

weixin_42510460的博客 3015

Linux 删除指定时间的文件。

显示20分钟前的文件 find /home/prestat/bills/test -type f -mmin +20 -exec ls -l {} \; 删除20分钟前的文件 find /home/prestat/bills/test -type f -mmin +20 -exec rm {...

cihuan0804的博客 973

Linux文件操作(包括批量修改文件权限、删除指定日期之前的文件列表、删除指定日期范围内的文件列表)

Linux文件操作

小红的成长日记 626

linux删除指定时间前的文件

在Shell中删除指定时间前的文件,可以使用find命令结合-mtime或-mmin选项来查找并删除文件。# 删除30天之前的文件# 删除60分钟之前的文件是要搜索的目录路径。-mtime +30表示查找修改时间在30天之前的文件。类似地,-mmin +60表示查找修改时间在60分钟之前的文件。-type f表示只查找普通文件,而不包括目录或其他特殊文件。f为文件,d为文件夹。是find命令中用来执行特定操作的部分。在这里,-exec参数表示执行后面指定的命令,rm是要执行的命令,{}代表。

勿在浮沙筑高 4404

Shell 脚本:按日期排序和查找文件 / 删除指定时间范围内的文件

有时候,我们会向一个文件夹里添加或删除文件,随着文件越来越多,操作历史越来越长,最初文件夹的状态可能就记不清了,某些时候,我们可能想恢复到文件夹的初始状态,重新来过,这时候就只能依靠文件修改时间来查找和过滤文件了。一个典型的场景就是:为了运行各种组件,我们会往一个 lib 文件夹中添加各种 Jar 包,有时候,时间久了,Jar 包可能会出现版本冲突,于是我们想清理到近期安装的各种 Jar 包,从初始状态重新开始。是以下字母的一些组合,但是在不同系统上,允许的组合种类也是不一样的,总得来说,

Laurence的技术博客 2928

Linux 按时间批量删除文件

Linux 按时间批量删除文件(删除N天前文件) 需要根据时间删除这个目录下的文件,/home/wang/dicom/studies,清理掉10天之前的无效数据。 可以使用下面一条命令去完成: find /home/wang/dicom/studies-mtime +11 -name “.” -exec rm -Rf {} ; 这个是根据时间删除。 下面简要解释一下,这句shell命令: find /home/wang/dicom/studies -mtime +11-name “.” -exec rm -

cqsizhuang的博客 2700

linux显示某个日期之前文件名,linux 删除指定日期之前的文件

两种方法:1. 在一个目录中保留最近三个月的文件,三个月前的文件自动删除。find /email/v2_bak -mtime +92 -type f -name *.mail[12] -exec rm -rf {} \;/email/v1_bak --设置查找的目录;-mtime +92 --设置时间为91天前;-type f --设置查找的类型为文件;-name *.mail[12] --设置文...

weixin_39619858的博客 900

linux系统怎么清理指定日期的文件,Linux系统删除指定时间段文件的方法(2)

搜索根目录下小于500KB的文件,命令行为:find / -size -500K -print删除文件大小为0的文件rm -i `find 。/ -size 0`find 。/size 0 exec rm {} ;find 。/size 0|xargs rm -rf在当前目录中查找所有文件名以.doc结尾,且更改时间在5天以上的文件,找到后进行删除,且删除前给出提示,命令行为:find 。 -na...

weixin_39780962的博客 1279
上一篇: Java程序员的Bash实用指南系列之字符串处理(目录)
下一篇: AA制消费金额统计的Bash脚本
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值