首页
学习
活动
专区
工具
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编程 自带manual的bash脚本 一个好的脚本是应该自带说明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 目录中的所有日志文件。您可以更改保存此目录的变量以清理其他日志。 #!

    36810

    日志清理脚本-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 正则表达式匹配日志文件

    38220

    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.4K20

    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.4K20

    第二章·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

    46630

    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 命令使用倒数第二个/,并忽略其后的所有字符。...,限制是最后必须存在一个非符号链接的文件。

    2K41

    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 可以看到原先目录只有一个全备份

    30000

    Shell脚本常用命令一览

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

    1.3K10
    领券