首页 / 知识
关于Unix:删除bash中除最新的X文件以外的所有文件
2023-04-13 02:27:00

Delete all but the most recent X files in bash在带有bash的标准UNIX环境中,是否有一种简单的方法来运行命令以从目录中删除除最新的X文件以外的所有文件? 再给出一个具体的例子,想象一下一些cron作业每小时将一个文件(例如,日志文件或已备份的备份)写到目录中。 我想要一种方法来运行另一个cron作业,该作业将删除该目录中最旧的文件,直到少于5个文件为止。 而且要清楚一点,只有一个文件存在,永远不要删除它。 现有答案存在的问题:
wnoise的答案解决了这些问题,但是解决方案是特定于GNU的(而且相当复杂)。 这是一个实用的,符合POSIX的解决方案,只有一个警告:它无法处理带有嵌入式换行符的文件名-但我认为对于大多数人来说,这并不是现实问题。
作为记录,以下是为什么解析
上面的方法效率低下,因为
如果您具有GNU
如果您具有BSD
说明:
如果匹配文件需要单独处理或收集在shell数组中,则是原始问题的变体:
删除目录中5个(或任意数量)的最新文件。
此版本支持带空格的名称:
thelsdj答案的简单变体:
ls -tr显示所有文件,从最旧的开始(-t最新的在先,-r反向)。 head -n -5显示除最后5行(即5个最新文件)以外的所有内容。 xargs rm为每个选定文件调用rm。
对于-printf需要GNU查找,对于-z需要GNU排序,对于" 0"需要GNU awk,对于-0需要GNU xargs,但是需要处理带有嵌入式换行符或空格的文件。 当前目录中有目录时,所有这些答案均失败。这是可行的:
这个: 当前目录中有目录时有效 尝试删除每个文件,即使无法删除前一个文件(由于权限等)
当当前目录中的文件数量过多并且 不能满足文件名中的空格(也许您使用的是错误的OS?)
按修改时间列出文件名,并引用每个文件名。排除前3个(最近3个)。删除剩余的。 在mklement0的有用注释后进行编辑(谢谢!):更正了-n + 3参数,请注意,如果文件名包含换行符和/或目录包含子目录,则此操作将无法按预期进行。 忽略换行符是在忽略安全性和良好的编码。 wnoise唯一的好答案。这是他的一个变体,它将文件名放在数组$ x中
如果文件名没有空格,则可以使用:
如果文件名中确实包含空格,则类似
基本逻辑:
用zsh 假设您不关心当前目录,并且文件不会超过999个(如果需要,请选择更大的文件,或者创建一个while循环)。
在 我意识到这是一个旧线程,但是也许有人会从中受益。此命令将在当前目录中查找文件:
这比以前的某些答案更可靠,因为它可以将搜索域限制为匹配表达式的文件。首先,找到符合您所需条件的文件。打印带有时间戳的文件。
接下来,按时间戳对其进行排序:
然后,从列表中删除4个最新文件:
抓住第二列(文件名,而不是时间戳):
然后将整个内容包装为for语句:
这可能是一个更冗长的命令,但是我能以条件文件为目标并针对它们执行更复杂的命令要好得多。 我需要一个用于busybox(路由器)的优雅解决方案,所有xargs或阵列解决方案对我来说都是无用的-那里没有这样的命令。 find和mtime不是正确的答案,因为我们谈论的是10个项目,不一定是10天。埃斯波的答案是最短,最简洁,也可能是最普遍的答案。 空格错误以及不删除任何文件时都可以通过标准方式解决:
更具教育意义的版本:如果我们以不同的方式使用awk,则可以完成所有操作。通常,我使用这种方法将变量从awk传递(返回)到sh。当我们阅读所有无法完成的时间时,我要有所不同:这是方法。 .tar文件示例,文件名中的空格没有问题。要测试,请将" rm"替换为" ls"。
说明:
由于我们使用的是
在使用 边注。如果我们想以这种方式将变量传递给sh,我们只需修改打印(简单形式,不能容忍空格):
将变量
在Sed-Onliners中发现了有趣的cmd-删除最后3行-发现它是另一种为猫皮的方法的完美选择(可以),但可以这样:
删除除10个最新(最新)文件外的所有文件
如果少于10个文件,则不会删除任何文件,您将拥有: 用bash计数文件
我将其制作为bash shell脚本。用法:
|
最新内容
相关内容
python怎么使用文件夹下的脚本?
python怎么使用文件夹下的脚本?,工作,培训,文件夹,脚本,文件,所在,方法,示例,路径,以上,python中使用文件夹下脚本的方法:将当前的工作目录(即python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件python中怎么读取doxc文件?
python中怎么读取doxc文件?,培训,文档,文件,路径,命令,以上,更多,内容,python中可以使用python-docx库读取doxc文件,我们可以使用pipinstallpython如何删除某个目录文件夹?
python如何删除某个目录文件夹?,名字,代码,培训,文件夹,方法,文件,目录,语法,路径,格式,python删除某个目录文件夹及文件的方法:#!/usr/bin/en如何在python代码中指定保存的文件
如何在python代码中指定保存的文件格式,代码,培训,文件格式,格式,二进制文件,文件,后缀,以上,方法,更多,python指定保存文件格式的方法:1、保Python如何复制文件中的内容
Python如何复制文件中的内容,盘中,数据,培训,文件,内容,方法,文件夹,路径,源文件,文件名,python复制文件中内容的方法:1、使用shutil.copyfilepython如何获取打开文件的行数?
python如何获取打开文件的行数?,数据,培训,文件,方法,列表,下标,字符串,序列,函数,长度,python获取打开文件行数的方法:1、文件较小时可以使用python怎么清除命令窗中的命令
python怎么清除命令窗中的命令,代码,培训,命令,冗余,以上,以下,方法,更多,内容,python清空命令行的方法:有时我们在命令行上运行一些代码时,觉怎么计算python程序运行时间
怎么计算python程序运行时间,时间,培训,程序,方式,脚本,下面,以上,两个,结束,不是,python脚本使用统计时间的方式是time.clock(),而这种方式统Python中怎么新建文件夹
Python中怎么新建文件夹,代码,工作,培训,文件夹,路径,函数,操作系统,示例,文件名,以上,python中如何新建文件夹的方法:可以使用os包的mkdir函Python文件如何转换为字符串
Python文件如何转换为字符串,数据,主体,名字,培训,文件,字符串,末尾,方法,对象,语句,python文件如何转换为字符串的方法:一、最方便的方法是一如何用python复制文件内容
如何用python复制文件内容,数据,名字,培训,文件,内容,方法,备份,字符串,文件名,语法,用Python复制文件:#输出需要备份的文件名oldname=input(