Я использую find
для поиска и удаления файлов резервных копий, но хочу исключить определенные каталоги из поиска. Резервные имена файлов может заканчиваться .bck
, bak
, ~
или backup
.
Код минимального рабочего примера (MWE), который нужно исключить только из трех каталогов:
#! /bin/bash
find . -type d \( -path "./.*" -o -path "./Music" -o -path "./Documents" \) -prune -o -type f \( -name "*.bck" -o -name "*.bak" -o -name "*~" -o -name "*.backup" \) -print0 | xargs -0 --no-run-if-empty trash-put
Синтаксис \( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -prune
кажется немного неуклюжим, особенно если нужно исключить около десяти каталогов, хотя я показал только три в MWE.
Есть ли более элегантный способ использования либо входного файла со списком исключенных каталогов, либо массива или конструкции, подобной списку, которая может быть введена в действие?
Я прошу прощения за то, что не был более явным, когда я написал свой оригинальный вопрос.
NB: trash-put
это утилита, которая перемещает файлы Trashcan
вместо того, чтобы удалять их [1].