首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

删除仅保留最后N个文件的Bash脚本

是一种用于自动化文件管理的脚本,可以通过它来删除文件夹中的旧文件,仅保留最新的N个文件。下面是一个完善且全面的答案:

Bash脚本是一种在Linux和Unix操作系统上运行的脚本语言,用于编写自动化任务。通过编写一个Bash脚本,可以实现删除文件夹中的旧文件,仅保留最新的N个文件的功能。

在编写这个脚本之前,我们需要了解一些Bash脚本中的基本命令和操作符。以下是相关的基本知识:

  1. ls命令:用于列出指定目录中的文件和文件夹。
  2. sort命令:用于排序文件内容。
  3. head命令:用于显示文件内容的前几行。
  4. rm命令:用于删除文件。
  5. sed命令:用于对文本进行替换和编辑操作。

接下来是一个删除仅保留最后N个文件的Bash脚本示例:

代码语言:txt
复制
#!/bin/bash

folder="/path/to/folder"  # 替换为目标文件夹路径
n=10  # 替换为要保留的最新文件数量

# 切换到目标文件夹
cd $folder

# 列出目标文件夹中的文件,并按修改时间逆序排序
files=$(ls -t)

# 获取需要删除的文件数量
count=$(ls -t | wc -l)
delete_count=$((count - n))

# 删除多余的文件
if [ $delete_count -gt 0 ]; then
    # 使用head命令获取最新的N个文件名
    files_to_delete=$(echo "$files" | head -n $delete_count)

    # 使用循环删除文件
    for file in $files_to_delete
    do
        rm $file
    done

    echo "$delete_count个文件已删除。"
else
    echo "没有需要删除的文件。"
fi

在这个示例脚本中,需要将/path/to/folder替换为目标文件夹的实际路径,并将n替换为要保留的最新文件数量。

脚本首先切换到目标文件夹,然后使用ls -t命令列出文件夹中的文件,并按照修改时间逆序排序。接下来,它计算需要删除的文件数量,并使用head -n命令获取最新的N个文件名。

最后,脚本使用循环结构遍历需要删除的文件,并使用rm命令删除它们。如果没有需要删除的文件,脚本将输出相应的提示信息。

这是一个基本的删除仅保留最后N个文件的Bash脚本示例。根据具体的需求,你可以根据需要对其进行修改和扩展。同时,腾讯云提供了一系列云计算相关的产品,例如云服务器、对象存储、云数据库等,可以根据具体的业务需求选择适合的产品。你可以访问腾讯云官方网站了解更多相关产品信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 一起来学shell bash编程(2)

    echo Hello {} 在命令行中通过用3冒号( :::)来指定输入: parallel echo Hello {} ::: A B C 最后,当用四冒号( ::::)分隔时,您也可以在文件末尾传递文件...GNU parallel内容,可以查阅我之前推文: 生信小技巧:并行运行秘密 更加高级shell编程 自带manualbash脚本脚本是应该自带说明manual。...例如,一脚本需要运行参数,参数使用说明等。 下面给大家一模板例子: bash getdata.sh *** This script needs arguments to work!...如何在bash中操作文件路径? 通常,我们必须在bash中操作文件名以删除其中各个部分。也许我们想要删除目录名称,或者保留文件名,或者保留不带扩展名文件名,或者删除扩展名等等。...下面让我看一些例子: FILE=/A/B/C.txt.gzecho $FILE 如预期打印: /A/B/C.txt.gz 从名称中删除目录,并使用basenameshell命令保留文件名: FILE=

    2K50

    shell_正则_变量_tr_awk_sed_cut(1)

    文章目录 正则表达式 特殊字符含义 匹配规则组合 ifconfig用法 执行脚本几种方式(bash shell) vim配置文件自动设置脚本文件脚本调试 变量 shell语言特点 强类型语言...脚本调试 1.命令错误 hostnam :命令继续向下执行 2.语法错误 syntax error :默认不会继续执行下去 脚本调试 bash -n file.sh 来检测脚本语法错误 bash...ls可以同时显示多个目录 $_ 上一命令最后参数 ># echo $_ ># /etc 删除变量 unset + 变量名 查看变量 export 查看目前环境变量 env...●-n 或 —quite 或 —silent 显示script处理后结果。...列出/root/testfile文件内容第5—7行 nl /root/testfile | sed -n '5,7p' 数据搜寻并显示/删除 .

    1.1K20

    shell语法学习

    shell 脚本删除文件。...它应该删除文件。 27.附加到文件 下面的 shell 脚本示例将向您展示如何使用 bash 脚本将数据附加到文件系统上文件。它向早期 editors.txt 文件添加了一行。 #!...28.测试文件存在 下一 shell 脚本示例显示如何检查 bash 程序中文件存在。 #!...Bash 33.显示上次更新文件 有时,您可能需要为某些操作查找最后更新文件。下面的简单程序向我们展示了如何在 bash 中使用 awk 命令执行此操作。...36.清理日志文件 下一简单示例演示了在现实生活中使用 shell 脚本简便方法。该程序只需删除 / var/log 目录中所有日志文件。您可以更改保存此目录变量以清理其他日志。 #!

    1.2K40

    40 简单又有效 Linux Shell 脚本示例

    脚本删除文件。...它应该删除文件。 27、附加到文件 下面的 shell 脚本示例将向您展示如何使用 bash 脚本将数据附加到文件系统上文件。它向早期 editors.txt 文件添加了一行。 #!...28、测试文件存在 下一 shell 脚本示例显示如何检查 bash 程序中文件存在。 #!...该程序暂停最后一条指令执行,直到 $time 秒,在本例中,用户提供了这一点。 32、wait 命令 wait 命令用于暂停 Linux bash 脚本系统进程。...36、清理日志文件 下一简单示例演示了在现实生活中使用 shell 脚本简便方法。该程序只需删除 / var/log 目录中所有日志文件。您可以更改保存此目录变量以清理其他日志。 #!

    30310

    日志清理脚本-V0.0.3(增加多目录清理、正则表达式匹配、调试模式;部分细节优化)

    增加 支持调试模式 Version 0.0.1 2020/06/05 删除 N 天前日志文件删除匹配 ".log" 日志文件 选项 sh clear-logs.sh [options] <...删除 N 天前日志文件,即保留 N 天日志,默认:7 -e 正则表达式匹配日志文件,如:"*.log*" -D...匹配目录类型,默认是查询每个文件删除,即 find 命令增加 “-type d” 参数 -t 调试模式,控制台打印日志,不删除日志文件...# # Version 0.0.1 2020/06/05 # 删除 N 天前日志文件删除匹配 "*.log*" 日志文件 # #=========================... 删除 N 天前日志文件,即保留 N 天日志,默认:7 #% -e 正则表达式匹配日志文件

    35420

    Linux私房菜:走进bash

    用户bash指令使用记录文件:~/.bash_history 命令与文件补全:tab 命令别名设定:alias 工作控制、前景和背景控制 程序化脚本:shell scripts 通配符:wildcard...number,执行第n指令;!command,往前模糊搜索匹配指令并执行;!!...,执行上一指令,相当于↑ + Enter ctrl + u 提示符命令输入下可快速删除整行 ctrl + s 暂停屏幕输出 ctrl + q 恢复屏幕输出 特殊符号 bash特殊符号 说明 #...字符到最后,export | cut -c 12- grep [-acinv] [--color=auto] '搜寻字符串' filename a将binary文件转成text文件后再搜索...n按数字排序 r反向排序 u去重,相同数据出现一行 t指定分隔符 k按指定区间排序,cat /etc/passwd | sort -t ':' -k 3 wc [-lwm],数据统计

    2.5K20

    Linux 和 Windows PowerShell 常用工具命令 记录

    /au-lsof.html ) 字符串操作: #, 删除左边第一匹配串,保留右边字符串 ##, 删除左边最后匹配串,保留右边字符串 %, 删除右边第一匹配串,保留左边字符串 4 %, 删除右边最后匹配串...,保留左边字符串 :0:N, 保留左边第一字符起N个字符 :X 保留左边第X个字符起N个字符 :0-X:N, 保留右边第X个字符起N个字符 :0-X, 保留左边第一字符起N个字符...) echo ${var%/*} # 删除var右边第一/*后内容 (http:/) echo ${var%%/*} # 删除var右边最后/*后内容 (http...) echo ${var:0-5:3} # 保留var右边第5字符起3字符 (t.n) echo ${var:0-5} # 截取var最后5字符 (t.net...文件 /etc/profile : 登入后执行脚本 ~/.bash_login : 同上,限定用户 ~/.bash_profile : 同上 ~/.profile : 同上 ~用户名 : 用户

    4K40

    java rpm卸载_使用RPM卸载软件「建议收藏」

    执行卸载前脚本(如果有的话) 检查配置文件是否已经被修改过,如果是,则保留它们备份。 查询数据库,找到这个包安装所有文件,如果该些文件不属于别的包,则将它们删除。...接下来两行显示出了卸载过程中删除文件,如果一包中包含了很多文件,那么使用-vv参数将会导致大量输出。 紧接着,RPM执行卸载后脚本,如果存在的话。这个脚本在所有文件删除后才执行。...最后最后5行显示出RPM删除了数据库中跟踪信息。 其他选项 –test:做卸载环境检测,但并不真正卸载软件。...,然而你也应当要知道是,这只是对配置文件RPM才会保留备份。...本站提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除

    2.3K20

    Linux 学习记录 四(Bash 和 Shell scirpt).

    二、Bash Shell 基本操作技巧 1、查看前一次登录执行过命令:vim ~/.bash_history 2、命令和文件补全功能(Tab键) tab 接在一串指令第一字后面,则为命令补全 tab...接在一串指令第二字后面,则为文件补全 3、命令别名设定功能:alias alias lm='ls -al' 4、程序化脚本(shell scripts) 5、通配符 ?...6、换行输入 \ +[enter] 7、从光标向前或者向后删除字符串 [crtl]+u / [crtl] +k 8、从光标移动到整个指令串最前面/最后面 [crtl] +a / [crtl]+e 9、...sh script 或者 bash script 都会使用一bash环境来执行脚本命令,当子程序完成后,子程序完成后,在子程序内各个变量或者动作将会结束而不会传回父程序中     source...脚本变量交互还可以用 ${0}、${1}、${2}、${3} 来进行,${0} 表示执行脚本名、${1} 表示输入第一变量、${2}表示输入第二变量、${3} 表示输入第三变量  ?

    1.2K40

    SHELL(bash)脚本编程二:语法

    shell脚本是指包含若干shell命令文本文件,标准bash脚本第一行形如#!/bin/bash,其中顶格写字符#!...向操作系统申明此文件是一脚本,紧随其后/bin/bash是此脚本程序解释器,解释器可以带一选项(选项一般是为了对一些情况做特殊处理,比如-x表示开启bash调试模式)。...默认情况下,管道命令返回值是最后命令返回值,为0,表示true,非0,则表示false;当保留关键字!作用于管道命令时,会对管道命令返回值进行取反。...每一次计算expr2得到非0值,执行do后面的list和第三表达式expr3。如果任何一表达式省略,则表示其值为1。for语句返回值是执行最后list返回值。 脚本举例: #!...case命令返回值是执行最后命令返回值,当匹配均没有成功时,返回值为0。 脚本举例: #!

    1.3K20

    第二章·Rsync 备份服务实战

    在同步数据时候,默认情况下,rsync通过其独特“quick check”算法,它同步大小或者最后修改时间发生变化文件或目录,当然也可根据权限、属主等属性变化同步,但是需要制定相应参数,甚至可以实现只同步一文件里有变化内容部分...rsync官方地址:TP rsync监听端口:873 rsync运行模式:C/S ---- 小提示:利用rsync还可以实现删除文件和目录功能,这又相当于rm命令,一rsync相当于scp、cp...-09-02 3.客户端最后将备份数据进行推送至备份服务器 4.客户端每天凌晨1点定时执行该脚本 5.客户端服务器本地保留最近7天数据, 避免浪费磁盘空间 ---- 服务端需求 1.服务端部署...rsync,用于接收客户端推送过来备份数据 2.服务端需要每天校验客户端推送过来数据是否完整 3.服务端需要每天校验结果通知给管理员 4.服务端保留6备份数据,其余全部删除 注意...日志 #4.应用程序服务配置文件 nginx、PHP、mysql、redis..... 1.客户端备份实现思路,脚本每天凌晨01点定时执行一次(打包->标记->推送->保留最近7天文件) [root

    43930

    AI 助力全自动化备份到对象存储

    背景说明网上有很多教程,写都是从零搭建一什么什么,基本上都是从无到有的教程,但是,很少有文章提及搭建好之后如何备份,我觉得备份才是一系统生命周期内永恒主题,是一值得花时间严肃对待问题。...本文尝试总结一些通用备份脚本,并且把备份文件上传至对象存储,来完成备份任务,应该能覆盖90%使用场景了。...注:本文涉及所有脚本默认针对Linux环境。备份MySQL#!...上文中备份脚本细节,最后会输出备份文件路径,目的是为了结合最后脚本上传至对象存储。整体使用逻辑是:备份脚本分别写,上传脚本共用同一。...另外,对于对象存储上内容,可以设置生命周期,自动删除备份。如下图(腾讯云对象存储为例),设置了备份保留30天。图片

    3.7K00

    Linux Bash脚本15分钟进阶教程

    这里技术技巧最初是来自谷歌“Testing on the Toilet” (TOTT)。这里是一修订和扩增版本。 脚本安全 我所有bash脚本都以下面几句为开场白: #!...= 字符串相等 == 以Globbing方式进行字符串比较(双中括号里使用,参考下文) =~ 用正则表达式进行字符串比较(双中括号里使用,参考下文) -n 非空字符串 -z 空字符串 -eq 数字相等...就显出用处了,它可以接受一命令,并把它转换成可以当成文件名之类什么东西: # 下载并比较两网页 diff <(wget -O - url1) <(wget -O - url2) 还有一非常有用处是...MARKER 内置变量 变量 说明 $0 脚本名称 $n 传给脚本/函数n参数 $$ 脚本PID $! 上一被执行命令PID(后台运行进程) $?...调试 对脚本进行语法检查: bash -n myscript.sh 跟踪脚本里每个命令执行: bash -v myscripts.sh 跟踪脚本里每个命令执行并附加扩充信息: bash -x myscript.sh

    1.1K00

    Shell脚本常用命令一览

    #参数说明 -c:若用-c参数,则bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始位置参数 -n:检测脚本是否正确并不执行脚本,仅仅验证语法; (常用) -v: 在执行脚本时候...脚本时会启动另一命令解释器,就好像你命令是在命令行提示下被解释一样,类似于批处理文件start cmd.bat 里一系列命令。....c`.o #重新拼接program.o文件 dirname 命令 描述:去除文件名中非目录部分,显示与目录有关内容,dirname命令读取指定路径名保留最后/及其后面的字符,删除其他部分...,并写结果到标准输出n如果最后/后无字符,dirname 命令使用倒数第二/,并忽略其后所有字符。...,限制是最后必须存在一非符号链接文件

    1.9K41

    xtra+binlog增量备份脚本(下)

    四.容灾测试 写入测试数据 创建脚本脚本将创建一single库,s1表,持续写入数据。 vim /root/bin/mysql_test.sh #!.../bin/bash #混合测试数据库脚本 #将创建一single数据库,其中创建一s1表 #如果数据库存在,将会写入数据,可以在写入部分sleep 1 来让数据持续写入 #使用方法 ....-2018-12-12-15-15.tar.gz 15.进入第二包,它是在最后一次增量备份后才执行binlog cd mybak-section-2018-12-12-15-07 将1509pos点之前删除...,每个binlog文件前18行要保留 mysqlbinlog mysql-bin.000003 > 03.log cat 03.log | grep -n 1509 恢复数据 cat 03.log...' -e "use single;select count(*) from s1;" 五.重写测试 进入到脚本目录 cd /root/bin 执行重写脚本 bash mybak-rewrite.sh 可以看到原先目录只有一全备份

    29700

    Shell脚本常用命令一览

    set命令中也能实现调试 bash -n database.sh    #示例2.执行脚本,输出执行过程,shell脚本自身已经包含了调式选项,能都打印出脚本接受参数和输入 bash -x database.sh...脚本时会启动另一命令解释器,就好像你命令是在命令行提示下被解释一样,类似于批处理文件start cmd.bat 里一系列命令。....c`.o #重新拼接program.o文件 dirname 命令 - 取得目录名称 描述:去除文件名中非目录部分,显示与目录有关内容,dirname命令读取指定路径名保留最后/及其后面的字符...,删除其他部分,并写结果到标准输出n如果最后/后无字符dirname 命令使用倒数第二/,并忽略其后所有字符。...,限制是最后必须存在一非符号链接文件

    1.2K10
    领券