【发布时间】:2011-12-22 12:05:09
【问题描述】:
我有一个带有这一行的 shell 脚本:
rm -rf `find something`
问题是,如果 find 返回带有空格的路径,rm 当然会将空格解释为两个不同路径之间的分隔符,并且命令会失败。
有没有办法告诉find 在它返回的路径周围加上引号或其他方法来解决这个问题?
【问题讨论】:
我有一个带有这一行的 shell 脚本:
rm -rf `find something`
问题是,如果 find 返回带有空格的路径,rm 当然会将空格解释为两个不同路径之间的分隔符,并且命令会失败。
有没有办法告诉find 在它返回的路径周围加上引号或其他方法来解决这个问题?
【问题讨论】:
为了安全起见,您可以使用
$ find start_dir -print0 -name something | xargs --null rm -rf
使用 NUL (0) 字符作为文件之间的分隔符。
【讨论】:
xargs --null也可以写成xargs -0。
-print0 和 -0 选项是 GNU 扩展,因此在某些系统上您需要使用 gfind 和 gxargs 而不是 find 和 xargs。
find something -exec rm {} \; 但我有点担心...
【讨论】:
你可以这样做:
find start_dir -name something -print0 | xargs -0 /bin/rm -rf
【讨论】:
find 和 xargs 的空终止符(这很容易修复):find start_dir -name something -print0 | xargs -0 /bin/rm -rf
一种稍微快一点的方法(用你想要的任何条件替换“某物”):
find something -exec rm -rf {} +
【讨论】: