删除包含某个文件的目录

snu*_*den 5 shell directory find rm

我想找到包含某个文件的所有目录,然后删除这些目录。和

find . -name thatcertainfile -execdir pwd \;

我得到了我想删除的所有目录的列表,但是我怎么能即时删除所有这些目录呢?请注意,我想删除整个目录,而不仅仅是文件本身,我可以在其中使用

find . -name thatcertainfile -exec rm -r {} \;

mig*_*grc 2

尝试这个命令:

rm -rf $(find . -name thatcertainfile -execdir pwd \;)

它应该告诉rm -rf它必须删除的是命令的输出。例如,如果您的命令的输出是/home/guest/Documents我显示的将在rm -rf /home/guest/Documents.

  • 这正是我一直在寻找的。谢谢! (2认同)
  • 这在大多数情况下有效,但会破坏包含空格、制表符、shell glob 字符等的目录(所有这些都是文件名和目录名中的有效字符 - 唯一不是的字符是 `/` 和 NUL)。使用“find ... |”会更安全。xargs -d '\n' rm -rf`,适用于除包含换行符之外的任何目录名称。不幸的是,当您依赖“-exec”或“-execdir”的输出来获取文件/目录列表时,我认为没有任何方法可以使用以 NUL 结尾的文件/目录名(这会更好)。 (2认同)
  • 如果在运行此命令之前创建目录 `mkdir -p './ /* /thatcertainfile'`,您最终将运行 `rm -rf /*`。假设您不是“root”;如果您创建目录 `mkdir -p "./ $HOME/ /thatcertainfile"` 您最终将强制删除整个主目录。我建议您在*任何*情况下**永远不要**使用此答案中给出的命令。(*至少*使用 `rm -ri` 来代替,它会提示您每次删除。) (2认同)