微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一次删除100个文件,统计文件总数

我已经写了一个bash脚本从一个目录一次删除100个文件,因为我得到的参数列表太长的错误,但现在我想统计总共从目录中删除的总文件

这是脚本

echo /example-dir/* | xargs -n 100 rm -rf

我想要的是将从每个目录中删除文件总数与path一起写入文件例如Deleted <count> files from <path>

我目前的设置如何实现?

需要RegExp帮助Linux Bash grep命令过滤掉包含方括号的行

python捕获环境variables

在bash脚本中将十进制转换为hex

使用Linux删除短于4个字符的单词

如何为目录中的每个文件创build软链接

在执行命令时,双击是做什么的?

Bash脚本改变工作目录到它所在的目录

在terminal上用正则expression式分组提取string

如何从bash提供mySQL查询

crontab自动化的python脚本不会上传到dropBox

你可以避免xargs ,并在一个简单的while循环中使用计数器:

destdir='/example-dir/' count=0 while IFS= read -d '' file; do rm -rf "$file" ((count++)) done < <(find "$destdir" -type f -print0) echo "Deleted $count files from $destdir"

注意-print0使用whitespaces / newlines / glob等来处理文件

你可以简单地通过启用rm详细输出来做到这一点,然后简单地使用wc -l来计算输出

如果文件名中有空格或特殊字符,则使用echo将文件列表传递给xargs将不起作用。

使用-print0来更好地使用NULL字符作为单个文件的分隔符:

find /example-dir -type f -print0 | xargs --null -n 100 rm -vrf | wc -l

顺便说一句,如果你真的有很多的文件,你经常这样做,看看其他一些选择可能是有用的:

使用find的内置-delete

time find . -name *.txt -print -delete | wc -l 30000 real 0m1.244s user 0m0.055s sys 0m1.037s

使用find的能力建立最大长度参数列表

time find . -name *.txt -exec rm -v {} + | wc -l 30000 real 0m0.979s user 0m0.043s sys 0m0.920s

使用GNU Parallel的能力建立长的参数列表

time find . -name *.txt -print0 | parallel -0 -X rm -v | wc -l 30000 real 0m1.076s user 0m1.090s sys 0m1.223s

使用一个Perl进程读取文件名并在计数时删除

time find . -name *.txt -print0 | perl -0ne 'unlink;$i++;END{print $i}' 30000 real 0m1.049s user 0m0.057s sys 0m1.006s

对于测试,您可以使用GNU并行来快速创建30,000个文件,这使得-X也可以建立长参数列表。 例如,我可以在8秒内在我的Mac上创建30,000个文件

seq -w 0 29999 | parallel -X touch file{}.txt

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐