Решением без передачи в другом месте было бы передать имя каталога в подоболочку в функции find
exec
.
Это будет не так эффективно, и, конечно, он попытается удалить несуществующие каталоги, если они уже были удалены.
find . -depth -type f -name 'things.txt' -exec sh -c 'rm -rf "$(dirname $0)"' {} \;
Если вы хотите использовать xargs
, вы можете сделать это очень просто, вот так. Обратите внимание, что dirname
принимает только один аргумент, поэтому вы должны указать -n 1
чтобы xargs
передавал только один:
find . -depth -type f -name 'things.txt' | xargs -n 1 dirname | uniq | xargs rm -rf
Это не будет безопасно, если имя вашего каталога содержит символ новой строки, так что имейте это в виду.