Tôi đang sử dụng find
để định vị và xóa các tập tin sao lưu nhưng muốn loại trừ các thư mục nhất định khỏi tìm kiếm. Các tên tập tin sao lưu có thể chấm dứt trong .bck
, bak
, ~
, hoặcbackup
.
Mã ví dụ làm việc tối thiểu (MWE) chỉ có ba thư mục để loại trừ là:
#! /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
Cú pháp \( -path "dir1" -o -path "dir2" ... -o -path "dirN" \) -prune
có vẻ hơi lộn xộn, đặc biệt nếu có khoảng mười thư mục để loại trừ, mặc dù tôi chỉ hiển thị ba trong MWE.
Có cách nào thanh lịch hơn bằng cách sử dụng tệp đầu vào, với danh sách các thư mục bị loại trừ hoặc cấu trúc giống như mảng hoặc danh sách, có thể được nhấn vào dịch vụ không?
Tôi xin lỗi vì đã không rõ ràng hơn khi tôi viết câu hỏi ban đầu của tôi.
NB: trash-put
là một tiện ích di chuyển các tệp đến Trashcan
thay vì xóa chúng [1].