通常,要删除文件名中带有空格的文件,您需要运行以下命令:
但是如果我想要删除多个文件,例如:
这不会删除文件名中有空格的文件。
$ rm "file name"
但是如果我想要删除多个文件,例如:
$ find . -name "*.txt" | xargs rm
这不会删除文件名中有空格的文件。
$ rm "file name"
$ find . -name "*.txt" | xargs rm
find
和xargs
同时使用空终止符。find . -name "*.txt" -print0 | xargs -0 rm
find
的内置-delete
动作。find . -name "*.txt" -delete
find . -name "*.txt" -exec rm {} +
任一种都应该在不需要 xargs
的情况下尊重系统的 ARG_MAX
限制。
ARG_MAX
,但是不能给它点赞两次哦 :) 我也要提一下,find . -name "*.txt" -exec rm {} \;
是一个“安全的尝试”。 - kos-print0
必须是最后一个选项(或者至少在 -name "*.txt"
之后),否则这将会匹配到不仅限于 *.txt
的文件... - Kevfind . -name "*.txt" | xargs -d '\n' rm
原回答来源于SO.顺便提一下,如果你使用的不是find命令,你可以使用tr命令将换行符替换为空字节。
例如,下面这个一行命令可以删除目录中最后修改的10个文件,即使它们的文件名中有空格。
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
find -name "*\ *.txt" | xargs rm
能用于删除两个单词文件吗? - TheWanderer