Answers:
码:
find /path/to/dir -type f -print0 | sort -zR | tail -zn +1001 | xargs -0 rm
说明:
/path/to/dir与find;
print0:使用 \0(空字符)作为行定界符;因此包含空格/换行符的文件路径不会破坏脚本sort; 随机排列文件列表;
-z:使用\0(空字符)作为分隔符,而不是\n(换行符)-R: 随机顺序tail; 从随机列表中去除前1000行。
-z:将列表视为以零定界(与相同sort)-n +1001:显示从1001开始的行(即,省略前1000行)xargs -0 rm -删除其余文件;
-0:再次以零分隔为什么它比quixotic的解决方案要好*:
find。find不以\n(换行符)结尾的情况而丢失文件。* -信贷不切实际的| sort -R | head -1000,给了我一个起点。
find . -type f | sort -R | tail -n +1001 | xargs rm
find?我将尝试改善答案,只需要一些输入即可使用。
tail: invalid option -- 'z'我的尾巴版本是8.4
使用一个临时目录,然后使用find所有文件,使用随机排列列表sort,然后将列表的前1000个移动到该临时目录中。删除其余的文件,然后将文件从临时目录移回。
$ mkdir ../tmp-dir
$ find . -type f | sort -R | head -1000 | xargs -I "I" mv I ../tmp-dir/
$ rm ./*
$ mv ../tmp-dir/* .
如果xargs抱怨行长,请使用较小的数字,head并根据需要重复该命令(即,更改-1000为-500并运行两次,或更改为-200并运行5次。)
它还将无法处理包含空格的文件名;如@rld的答案所示,您可以使用find的-print0参数,和和的-z参数以及with 来确保正确处理文件名。sorthead-0xargs
最后,如果tmp-dir已经存在,则应替换一个不存在的目录名。
find包含空格,则此操作将失败。
对于Mac用户,以下脚本应该执行。
find . -type f -print0 | tr '\0' '\n' | sort -R | tail -n +10000 | tr '\n' '\0' | xargs -0 rm
tr将允许sort和tail使用\n代替来处理列表\0。