要获取目录中的 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)
为此,您需要的工具是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)