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版) 》