我有一个上传目录,我想从中删除随机 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
-0
rm
如果您只想预览结果,请将命令更改为
find /uploads -maxdepth 1 -type f -name "*.jpg" -print0 | \
head -z -n 1000 | xargs -0 echo rm
即替换xargs … rm
为xargs … echo rm
。也许还可以将 替换1000
为10
以进行预览。
免责声明:我不知道如何打印的文件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