AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1294588
Accepted
Broadsworde
Broadsworde
Asked: 2020-11-24 01:16:30 +0800 CST2020-11-24 01:16:30 +0800 CST 2020-11-24 01:16:30 +0800 CST

如何使用 sed 从以零结尾的文件名列表中删除时间戳模式

  • 772

要查找比我正在使用的最新 8 旧的文件:

find . -maxdepth 1 -type f -printf '%T@ %p\0' | sort -rz | sed -z 1,8d

该-printf '%T@ %p\0'命令将最后修改的时间戳(表示为自 1970 年 1 月 1 日 00:00 GMT 以来的秒数,带有小数部分)到每个匹配的以零结尾的文件名的开头,例如:

1597765267.7628475560 ./fileName2.txt1597765264.0267179360 ./fileName1.txt

为了通过管道删除这些最旧的文件xargs -0 gio trash,我需要删除时间戳。所以我添加了另一个 sed 命令来执行此操作:

find . -maxdepth 1 -type f -printf '%T@ %p\0' | sort -rz | sed -z 1,8d | sed -z "s/^[0-9]*.[0-9]* //g"

现在我有正确的输出,但是有更好更有效的方法吗?


根据@Quasímodo 的回答,我尝试使用 sed 删除模式格式进一步简化(因为我实际上并没有替换任何东西),但我没有得到任何输出:

find . -maxdepth 1 -type f -printf '%T@ %p\0' | sort -rnz | sed -z "1,8d; /^[0-9]*\.[0-9]* /d"

任何建议表示赞赏。

结论(来自多个响应):

find $targetPath -maxdepth 1 -type f -printf '%T@ %p\0' | sort -rnz | sed -z "1,${retain}d; s/^[^ ]* //"

Where :
$targetPath, 查找文件的目录,例如当前目录 '.'
${retain},要保留的最新文件数,例如 8

command-line bash sed
  • 3 3 个回答
  • 1167 Views

3 个回答

  • Voted
  1. terdon
    2020-11-24T03:33:48+08:002020-11-24T03:33:48+08:00

    由于您控制输出,因此很容易删除时间戳。您知道每条\0-delineated 记录都以时间戳开头,然后是空格。因此,您需要做的就是删除所有非空格字符,直到第一个空格:

    find . -maxdepth 1 -type f -printf '%T@ %p\0' | 
        sort -rz | sed -z '1,8d; s/^[^ ]* //'
    

    但是,您可能需要数字排序,您也可以只对第一个字段进行排序,而无需对文件名进行排序。因此,这将为您提供 8个最旧的文件:

    find . -maxdepth 1 -type f -printf '%T@ %p\0' | 
        sort -rznk1,1 | sed -z '1,8d; s/^[^ ]* //'
    
    • 5
  2. Best Answer
    Quasímodo
    2020-11-24T01:58:19+08:002020-11-24T01:58:19+08:00

    将两个 Sed 进程转换为一个。

    sort -zrn | sed -z "1,8d; s/^[0-9]*\.[0-9]* //"
    

    应用的更正:

    • 做一个n数字排序。
    • .匹配任何字符,它应该\.在正则表达式中。
    • g替换记录中的所有匹配项。您只需要从每条记录中进行一次替换(即删除时间戳),因此请删除g. 此修改还提高了性能。

    您的尝试sed -z "1,8d; /^[0-9]*\.[0-9]* /d"失败,因为/^[0-9]*\.[0-9]* /d删除了与正则表达式匹配的每一行。这与s/^[0-9]*\.[0-9]* //删除匹配正则表达式的字符串不同。

    • 4
  3. BeastOfCaerbannog
    2020-11-24T02:56:41+08:002020-11-24T02:56:41+08:00

    您可以将find命令与 GNU 一起使用awk:

    find . -maxdepth 1 -type f -printf '%T@ %p\0' | sort -zrn | awk 'BEGIN{RS=ORS="\0"} NR>8 {sub(/[^ ]+ /, ""); print}'
    

    这里:

    • 我们将输入记录分隔符 ( RS) 和输出记录分隔符 ( ORS) 设置为\0。

    • 对于从第8NR>8条记录开始sub(/[^ ]+ /, "")(print感谢@Quasimodo建议对上述命令进行改进。

    例子:

    $ touch {01..15}.txt
    $ ls
    01.txt  02.txt  03.txt  04.txt  05.txt  06.txt  07.txt  08.txt  09.txt  10.txt  11.txt  12.txt  13.txt  14.txt  15.txt
    $ find . -maxdepth 1 -type f -printf '%T@ %p\0' | sort -zrn | awk 'BEGIN{RS=ORS="\0"} NR>8 {sub(/[^ ]+ /, ""); print}'
    ./07.txt./06.txt./05.txt./04.txt./03.txt./02.txt./01.txt
    
    • 3

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve