Một giải pháp mà không đường ống ở một nơi khác sẽ được vượt qua tên thư mục đến một subshell trong find
's exec
chức năng.
Điều này sẽ không hiệu quả và tất nhiên nó sẽ cố gắng xóa các thư mục không tồn tại nếu chúng đã bị xóa.
find . -depth -type f -name 'things.txt' -exec sh -c 'rm -rf "$(dirname $0)"' {} \;
Nếu bạn muốn sử dụng xargs
, bạn có thể làm điều đó rất đơn giản như vậy. Lưu ý rằng dirname
chỉ mất một đối số, vì vậy bạn phải xác định -n 1
có xargs
chỉ vượt qua một:
find . -depth -type f -name 'things.txt' | xargs -n 1 dirname | uniq | xargs rm -rf
Điều này sẽ không an toàn nếu tên thư mục của bạn chứa một dòng mới, vì vậy hãy lưu ý điều đó.
xargs -n 1
chia tách tên thư mục với khoảng trắng trong đó, làm cho nó không thể sử dụng được. Có cách nào để khắc phục điều đó?