命令行最大长度以及如何批量删除大量匹配文件?

作者: , 共 746 字 , 共阅读 0

假设一个目录下有很多很多".bak"文件,如果我们直接用rm命令删除:

rm *.bak

会爆出错误:

zsh: argument list too long: rm

这是因为*.bak会展开为所有实际的文件列表接在rm后面,这样命令就会超过命令行的最大长度。我们可以采取备选方法:

find . -type f -name '*.bak' | xargs rm

在搜索的过程中,还发现一个更简单的方法:

find . -type f -name '*.bak' --delete

如何查看命令行最大长度:

$ getconf ARG_MAX
2097152

但实际应该到不了 2097152。xargs --show-limits的 131072 的缓冲区限制看上去更真实一点。

$ xargs --show-limits
Your environment variables take up 3443 bytes
POSIX upper limit on argument length (this system): 2091661
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2088218
Size of command buffer we are actually using: 131072
Maximum parallelism (--max-procs must be no greater): 2147483647

Q. E. D.

类似文章:
IT » gnu, Linux
简单列一些 Linux 自带的 GNU 命令的常用用法,可以当做 cheatsheet 使用。
编程 » Linux, Vim, 字符编码
由于 UNICODE 的优势,目前推荐都用 UTF-8 进行编码。
现在相机的像素实在是太高了,上次去泰山玩,朋友的 1200 万像素的 D90 照出来的照片分辨率高达 4288×2848 ,即使转为 jpg 格式,每张都在 5M 以上。而现在电脑屏幕的分辨率最高也在 1920 以下吧,超高分辨率的照片除了打印大照片之外没什么用处,反而不方便传输、流通、保存。
IT » Linux, cheatsheets
cheat 提供命令行的速记记录,在命令行下,随时增加笔记随时查看,用的时间越长越强大!
编程 » GIT
有时候不小心把一些大文件 commit 到了本地版本库,但往网络版本库同步时,因为文件过大被拒绝。如果在上传前,本地有多次提交,此时再在当前版本里删除这些大文件还不够,还需要把历史记录全删掉。效果要跟从来没提交过这些文件一样。
Python的命令行包argparse内置了-h, --help命令。但它没有分组,和其它的命令混在一起,并且显示在最前面。我更喜欢把它放在单独的「LOG 和帮助」分组:
编程 » C++, popen
popen函数可以获取比std::system函数更详细的程序输出。只是正常调用 popen 只能获取 stdout 的输出,而 stderr 的输出被忽略。
编程 » Linux, rsync
在同步一个超大文件时,发现 rsync 并没有按照预期的同步一个文件。而使用md5sum检验文件内容时,原始文件和目标文件的内容并不一样。
获取程序占用的内存量,是一个诡异的需求。但程序写多了,有时候还真需要,尤其是代码运行出现问题的时候。
编程 » folly, C++, 数据容器
由 Facebook 开发和维护的 C++库 Folly 提供folly::small_vector,代码文件地址:https://github.com/facebook/folly/blob/master/folly/small_vector.h
户外 » 平谷片区, 滑雪
渔阳滑雪场在北京的东边平谷地区,路程稍微远一些,但因为走全程车相对少的京平高速,路上时间差不多。这次去是滑雪季的尾声,场上人不多,无论魔毯还是缆车,都不用排队。
香八拉是北京驴友的拉练路线,全称是「香山到八大处拉练」,被称之为户外徒步的入门线路。周日在绿野亲子组织了一次线路打卡。这次走的路线一共 12 公里,爬升 670 米。