xargs 和 find 算是一对死党。两者结合使用可以让任务变得更轻松。不过人们通常却是以一种错误的组合方式使用它们。例如:
find . -name "*.txt" -print | xargs rm -f

这样做很危险。有时可能会删除不必要删除的文件。我们没法预测分隔 find 命令输出结果的定界符究竟是什么('\n'或者' ',即便你先用find查找输出了想要操作的文件)。很多文件名中都可能会包含空格符(' '),因此 xargs 很可能会误认为它们是定界符(例如,hell text.txt会被xargs误解为hell和text.txt)。
只要我们把 find 的输出作为 xargs 的输入,就必须将 -print0 与 find 结合使用,以字符null('\0')来分隔输出。
用 find . -name "*.txt" -print0 | xargs -0 rm -f

这样就可以删除所有的.txt文件。xargs -0 将 \0 作为输入定界符。
字文摘自《 Linux Shell脚本攻略 (第2版) 》
本文探讨了如何正确结合使用xargs和find命令,避免在批量处理文件时可能遇到的问题,特别是通过使用-print0和-0选项来确保即使文件名包含空格也能正确处理。
306

被折叠的 条评论
为什么被折叠?



