Как я могу удалить ненужные файлы с тильдой с помощью команды 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
0
05.07.2017, 13:41
3 ответа

В вашем подходе 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
28.01.2020, 02:33

Вот мой ответ,

find. -type f -name '*~' -exec rm -f '{}' \;
1
28.01.2020, 02:33

С опцией globstarbash:

shopt -s globstar ; rm./**/*~

globstarдопускает рекурсивное подстановывание с помощью **, в то время как ./предотвращает проблемы с именами файлов, которые могут иметь начальный -в них, а *~будет соответствовать именам файлов, заканчивающимся на тильду

1
28.01.2020, 02:33

Теги

Похожие вопросы