【问题标题】:How to use ls command output in rm for a particular directory如何在 rm 中为特定目录使用 ls 命令输出
【发布时间】:2016-04-26 11:21:07
【问题描述】:

当文件数大于5时,我想删除目录中最旧的文件。我正在使用

(ls -1t | tail -n 3)

获取目录中最旧的 3 个文件。这完全符合我的要求。现在我想用 rm 在一个命令中删除它们。当我在 Linux 服务器上运行这些命令时,cd 进入目录并且删除不起作用,所以我需要使用 find 或 ls 和 rm 并删除最旧的 3 个文件。请帮忙。 谢谢:)

【问题讨论】:

  • cd 进入目录但删除不起作用 - 怎么样? ls -1t 也只在当前目录上运行,所以既然这样有效,它必须已经在正确的目录中。

标签: linux find ls rm


【解决方案1】:

如果您想从某个任意目录中删除文件,请将目录名称传递给ls 命令。默认是使用当前目录。

然后像这样使用$()参数扩展将tail的结果传递到rm中

rm $(ls -1t dirname| tail -n 3)

【讨论】:

  • 我想在一个特定的目录中删除,我不能将目录名传递给rm cmd吗?一些喜欢:rm <dir_name_where _it_has_to_delete> $(ls -1t <files_location>| tail -n 3)
  • 如果我使用 cd && rm $(ls -1t | tail -n 3),那么它说没有这样的目录。它们是 zip 文件,不会被删除。
  • 我已经更新了答案,以便您可以从任何目录中删除文件。
  • 如果ls返回No such file or directory会发生什么
【解决方案2】:
rm $(ls -1t | tail -n 3) 2> /dev/null

【讨论】:

  • 为什么要重定向stderr?为什么不rm -f?
【解决方案3】:

ls 可能会返回 No such file or directory 错误消息,这可能会导致 rm 使用该值运行不必要的操作。

借助以下答案:find - suppress "No such file or directory" errors 和 https://unix.stackexchange.com/a/140647/198423

find $dirname -type d -exec ls -1t {} + | tail -n 3 | xargs rm -rf

【讨论】:

    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多