【问题标题】:Delete directories with xargs使用 xargs 删除目录
【发布时间】:2015-01-10 22:47:26
【问题描述】:

我有一个使用xargs 删除的文件夹列表,使用find 生成

find 命令

$ find /home/users/lukes -maxdepth 1 -type d > test.txt

test.txt

/home/users/lukes/2
/home/users/lukes/6
/home/users/lukes/7
/home/users/lukes/3
/home/users/lukes/1
/home/users/lukes/4
/home/users/lukes/5

命令和 --verbose 输出

$ xargs --verbose -0 -I{} rm -rfv {} < test.txt 
rm -rfv /home/users/lukes/2
/home/users/lukes/6
/home/users/lukes/7
/home/users/lukes/jadu_package_1.1.0
/home/users/lukes/3
/home/users/lukes/1
/home/users/lukes/4
/home/users/lukes/5

但是目录没有被删除?

我正在使用-0,因为当我真正运行它时可能会有空格,我正在生成列表,所以我可以确认每一行都可以安全地在文本文件中删除,而不是直接管道findxargs

有什么建议吗?

【问题讨论】:

    标签: linux command-line-interface xargs


    【解决方案1】:

    所以,首先让我说我非常不喜欢 xargs。如果你不小心,那真的很危险。话虽如此,这样的事情会起作用:

    find /home/users/luke -mindepth 1 -maxdepth 1 -type d|xargs --verbose -I{} rm -vfr "{}"
    

    通过将 {} 放在双引号中,您可以消除任何涉及空格的问题。我倾向于尽可能频繁地使用""'' 来处理类似的事情。我把 mindepth 放在那里以确保它不包括父文件夹,因为某些操作系统的 maxdepth 包括父目录(即'.'),这将有效地破坏整个文件夹。我想你不想那样。

    再次提醒,使用 xargs 时要非常小心。该命令可能是邪恶的。我会说先在其上添加 -0 以使其显示将要运行的内容,然后在您确定后删除 -0。

    希望对你有帮助。

    【讨论】:

    • 我提到我不能直接从 find 管道,因为需要审查每个目录以进行删除 - 这将 text.txt 文件作为输入工作吗?作为审查的一部分,我删除了 . (当前目录)来自列表
    • 确认您可以使用 text.txt 作为输入
    猜你喜欢
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2016-01-09
    • 2012-12-20
    • 2013-06-02
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多