我已经写了一个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个字符的单词
在执行命令时,双击是做什么的?
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] 举报,一经查实,本站将立刻删除。