cod*_*dog 72 recursive wildcards rm
我正在 WD My Book World Edition 上通过 SSH 工作。基本上我想从特定的目录级别开始,并递归地删除所有匹配.Apple*. 我该怎么做?
我试过
rm -rf .Apple* 和 rm -fR .Apple*
都没有删除子目录中与该名称匹配的目录。
Sha*_*off 89
find 对于选择性地对整棵树执行操作非常有用。
find . -type f -name ".Apple*" -delete
Run Code Online (Sandbox Code Playgroud)
在这里,-type f确保它是一个文件,而不是一个目录,并且可能不是你想要的,因为它还会跳过符号链接、套接字和其他东西。您可以使用! -type d,它的字面意思是不是目录,但是您也可以删除字符设备和块设备。我建议查看-type手册页上的谓词find。
要严格使用通配符,您需要高级 shell 支持。Bash v4 有一个globstar选项,它允许您使用**. zsh并且ksh也支持这种模式。使用它,你可以做rm -rf **/.Apple*. 这不是 POSIX 标准,也不是很便携,所以我会避免在脚本中使用它,但对于一次性交互式 shell 操作,这很好。
Pat*_*Pat 21
由于其手册页中所述的故意行为(即,如果路径以 ./ 开头,则拒绝删除,在我的情况下他们这样做),我在使用find时遇到了问题:-deletefind
Run Code Online (Sandbox Code Playgroud)-delete删除找到的文件和/或目录。总是返回真。这从当前工作目录执行,因为 find 在树中递归。它不会尝试删除相对于“.”的路径名中带有“/”字符的文件名。出于安全原因。
此选项隐含了深度优先遍历处理。
以下符号链接与此选项不兼容。
相反,我能够做到
find . -type d -name 'received_*_output' -exec rm -r {} +
Run Code Online (Sandbox Code Playgroud)
对于您的情况,似乎引用 glob (asterisk, *) 是解决方案,但我想提供我的答案,以防其他人遇到类似问题。
注意:以前,我的回答是执行以下操作,但@Wildcard 在评论中指出了这样做的安全漏洞。
find . -type d -name 'received_*_output' | xargs rm -r
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108006 次 |
| 最近记录: |