【问题标题】:Get directory name with grep and remove it使用 grep 获取目录名称并将其删除
【发布时间】:2020-02-11 21:03:57
【问题描述】:

请问有什么简单的方法可以让我仅从 DATE NAME 输出,然后在这些行上以 NAME 作为参数调用其他名为 rm 的命令?

我从 mega-ls path/ -l (mega.nz) 命令得到以下输出:

FLAGS VERS    SIZE            DATE       NAME
d---    -          - 06Feb2020 05:00:01 bk_20200206050000
d---    -          - 07Feb2020 05:00:01 bk_20200207050000
d---    -          - 08Feb2020 05:00:01 bk_20200208050000
d---    -          - 09Feb2020 05:00:01 bk_20200209050000
d---    -          - 10Feb2020 05:00:01 bk_20200210050000
d---    -          - 11Feb2020 05:00:01 bk_20200211050000

我尝试了 grep、sort 和其他方式,例如mega-ls 路径/ -l | head -n 5 但我不知道如何根据日期搜索这些行。

非常感谢。

【问题讨论】:

  • 使用find 命令。
  • 要添加到 @Barmar 的评论中,听起来您只想要 find path -type f -mtime 5 -delete 之类的东西(在执行此操作之前将 -delete 替换为 -print)
  • mega-lsmegals使用mega.nz网站的api。
  • 您要删除哪些文件?
  • @cyrus 我想删除超过五天前创建的所有目录(上面输出中的名称)。

标签: bash shell grep


【解决方案1】:

我尝试为您的请求找到简单的方法;)

mega-ls path/ -l | head -n 5 | tr -s ' ' | cut -d ' ' -f6 | grep -v -e '^$' | grep '^bk_20200206.*' | xargs rm -f

第 1 部分:这是你的命令(由额外数据返回的文件夹列表)

mega-ls 路径/ -l |头 -n 5

第 2 部分:尝试删除第 1 部分结果中的多余空间

tr -s ' '

第 3 部分:尝试使用 cut 命令分隔结果第 2 部分并返回名称文件夹列

剪切-d''-f6

第 4 部分:尝试从结果第 3 部分中删除空行(标题行的结果)

grep -v -e '^$'

第 5 部分:这是您按日期 yyyymmdd 格式示例搜索文件夹名称的请求:20200206(将 20200206 替换为您的实际日期需要)

grep '^bk_20200206.*'

第 6 部分:(非常重要!!)如果您需要删除结果文件夹,请使用此部分(非常重要!!)

xargs rm -f

最好的问候

【讨论】:

  • 如果文件名中有空格,您的cut 将不起作用,因为这只会选择文件名的第一部分。
  • grep 中,模式末尾的.* 是多余的,除非您使用-o 标志。
猜你喜欢
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多