如何从目录中删除随机n个文件?

Has*_*gır 5 delete files 16.04

我有一个上传目录,我想从中删除随机 1000 张图片。我怎么能用命令做到这一点?

我可以删除单个,rm但需要很长时间.. 有没有办法在 ubuntu 上批量删除?

Per*_*uck 8

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
        head -z -n 1000 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

find命令在目录中查找任何-type f名为*.jpg( -name "*.jpg") 的文件 ( )/uploads并且不会递归到子目录 ( -maxdepth 1) (它通常会这样做)。然后打印文件名,中间\0有一个分隔符。这是必要的,因为文件名可能包含奇怪的字符(如空格等)。

该输出被输入到head命令中。它读取-n 1000\0( -z)分隔的前 1000 行( )。

最终,这 1000 行(=文件名)被送入xargs其中,也期望这些行被\0( -0)分隔,然后rm以所有这 1000 行作为参数执行。


如果只想预览结果,将命令改为

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
    head -z -n 1000 | xargs -0 echo rm
Run Code Online (Sandbox Code Playgroud)

即替换xargs … rmxargs … echo rm。也许也替换100010的预览。


免责声明:我不知道打印的文件是如何find排序的,但至少它不是一些明显的属性(如姓名或年龄)并且看起来是随机的。如果你真的想选择 1000 个随机文件,你需要插入 asort -R来随机排序(再次-z用于\0分隔符):

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
    sort -z -R | head -z -n 1000 | xargs -0 rm
Run Code Online (Sandbox Code Playgroud)

  • @HasanTıngır 不客气。谢谢你。:-) 我很感激,很高兴我能帮助你!我喜欢回答,实际上 _one-line-answers_(就像`find ...` 命令)在 AU 上不太受欢迎。没有解释,没有足够知识的人无法判断答案是对/错/恶意,或者如何将其调整到他们自己的问题中。 (3认同)
  • 这不是答案,不……这超出了答案。这是一种杰作:)谢谢brotha :) (2认同)