如何使用linux命令删除带有波形符标记的不需要的文件?

如何使用linux命令删除带有波形符标记的不需要的文件?

在这里,我想从我的目录和子目录中删除所有波浪号文件。这里如何使用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允许使用 , 进行递归通配**,同时./防止文件名中可能包含前导的问题-,并且*~会匹配以波浪号结尾的文件名

相关内容