Używam find
do lokalizowania i usuwania plików kopii zapasowych, ale chcę wykluczyć niektóre katalogi z wyszukiwania. Nazwy plików kopii zapasowych mógł zakończyć w .bck
, bak
, ~
, lub backup
.
Kod minimalnego przykładu roboczego (MWE) z tylko trzema katalogami do wykluczenia to:
#! /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
Składnia \( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -prune
wydaje się trochę niezgrabna, szczególnie jeśli jest około dziesięciu katalogów do wykluczenia, chociaż pokazałem tylko trzy w MWE.
Czy istnieje bardziej elegancki sposób korzystania z pliku wejściowego z listą wykluczonych katalogów lub z konstrukcją podobną do tablicy lub listy, którą można wprowadzić do usługi?
Przykro mi, że nie wyraziłem się jasno, kiedy napisałem swoje oryginalne pytanie.
NB: trash-put
to narzędzie, które przenosi pliki Trashcan
zamiast je usuwać [1].