如何删除目录中X个文件

Dav*_*542 4 unix linux

要获取目录中的 X 个文件,我可以这样做:

$ ls -U | head -40000
Run Code Online (Sandbox Code Playgroud)

那么我该如何删除这 40,000 个文件呢?例如,类似:

$ "rm -rf" (ls -U | head -40000)
Run Code Online (Sandbox Code Playgroud)

Ada*_*m B 6

为此,您需要的工具是xargs. 它将标准输入转换为您指定的命令的参数。输入的每一行都被视为单个参数。

因此,类似这样的东西是可以工作的(不过,请参阅下面的评论,ls通常不应以这种方式解析):

ls -U | head -40000 | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

我建议在尝试此操作之前先从小尺寸开始head,并用于xargs echo打印正在传递的文件名,以便您了解要删除的内容。

请注意,如果您的文件包含奇怪的字符,这有时可能会成为问题。如果您使用的是现代 GNU 系统,您可能还希望使用这些命令的参数,这些命令使用空字符来分隔每个元素。由于文件名不能包含空字符,因此可以安全地解析所有可能的名称。我不知道有什么简单的方法可以X在零分隔时获取最上面的项目。

例如,您可以使用它来删除目录中的所有文件

find . -maxdepth 1 -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)

  • [解析 `ls`](http://mywiki.wooledge.org/ParsingLs) 是一种反模式,在任何自动化中都应该避免。(我意识到这是问题所在,但读者可能会直接跳到答案。) (2认同)