在这里,我想从我的目录和子目录中删除所有波浪号文件。这里如何使用linux命令呢?
树结构:
.
|-- Block_Physical_design_checklist
| |-- Block_Physical_design_checklist.config
| |-- Block_Physical_design_checklist.html
| |-- Block_Physical_design_checklist.html~
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- CAD_checklist
| |-- CAD_checklist.config
| |-- CAD_checklist.html
| |-- CAD_checklist.html~
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- Formality_DCT_Vs_ICC
| |-- Formality_DCT_Vs_ICC.config
| |-- Formality_DCT_Vs_ICC.html
| |-- Formality_DCT_Vs_ICC.html~
| `-- rev6
| |-- rev6.config
| |-- rev6.html
| `-- rev6.html~
预期的树结构:
.
|-- Block_Physical_design_checklist
| |-- Block_Physical_design_checklist.config
| |-- Block_Physical_design_checklist.html
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- CAD_checklist
| |-- CAD_checklist.config
| |-- CAD_checklist.html
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- Formality_DCT_Vs_ICC
| |-- Formality_DCT_Vs_ICC.config
| |-- Formality_DCT_Vs_ICC.html
| `-- rev6
| |-- rev6.config
| |-- rev6.html
答案1
您的方法find . -type f -name '*~' -exec rm -f '{}' \;
有几个问题/改进范围:
-name '*~'
仅匹配以~
;结尾的文件如果您想匹配任何包含 的文件~
,请使用*~*
-exec rm -f '{}' \;
为每个文件生成rm
,这是笨拙且低效的;相反,由于rm
可以将多个文件作为参数,因此您可以告诉find ... -exec
一次获取尽可能多的文件,而不会触发ARG_MAX
使用+
参数-exec
将这两者放在一起:
find . -type f -name '*~*' -exec rm -f {} +
如果您碰巧有 GNU find
,您可以使用以下-delete
操作:
find . -type f -name '*~*' -delete
在 中zsh
,您可以一次性进行递归模式匹配和删除,如下所示:
rm -f -- **/*~*(.)
glob 修饰符.
仅匹配常规文件。
答案2
这是我的回答,
find . -type f -name '*~' -exec rm -f '{}' \;
答案3
使用 bash 的globstar
选项:
shopt -s globstar ; rm ./**/*~
globstar
允许使用 , 进行递归通配**
,同时./
防止文件名中可能包含前导的问题-
,并且*~
会匹配以波浪号结尾的文件名