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

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

我有一个上传目录,我想从中删除随机 1000 张图片。如何使用命令执行此操作?

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

答案1

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
        head -z -n 1000 | xargs -0 rm

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

该输出被输入到head命令中。它读取前 1000 个“行”( ),这些行由( )-n 1000分隔。\0-z

最终,这 1000 个“行”(= 文件名)被输入其中,并且期望“行”之间用( )xargs分隔,然后以所有这 1000 行作为参数执行。\0-0rm


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

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
    head -z -n 1000 | xargs -0 echo rm

即替换xargs … rmxargs … echo rm。也许还可以将 替换100010以进行预览。


免责声明:我不知道如何打印的文件find是经过排序的,但至少不是一些明显的属性(如姓名或年龄)和看起来随机。如果您确实想挑选 1000 个随机文件,则需要插入一个sort -R以进行随机排序(再次使用-z分隔\0符):

find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
    sort -z -R | head -z -n 1000 | xargs -0 rm

相关内容