Linux как удалить папку на основе подпапки

Linux как удалить папку на основе подпапки

Мне нужно удалить ряд папок в Linux, основываясь на имени подпапки.

/tmp/23245/Default
/tmp/34534/Default
/tmp/45435/Default
/tmp/65464/Main

Я хочу удалить все папки из /tmp, которые содержат подпапку /Default

эти папки

/tmp/23245/
/tmp/34534/
/tmp/45435/

Я могу найти файлы с помощью: find /tmp/*/Default

Но как из этого вывода получить имя папки /tmp/Foldername для передачи в rm -rf?

решение1

Вы можете попробовать следующее с помощью find:

find /tmp -mindepth 2 -maxdepth 2 -name "*Default*" -type d -printf "%h\n" | xargs rm -R

Используйте mindepth и maxdepth, чтобы убедиться, что мы анализируем каталоги на 2 уровня ниже /tmp, а затем используйте %h, чтобы вывести только ведущие каталоги. Передайте вывод через xargs rm -R, чтобы удалить ведущие каталоги.

решение2

dirnameВ GNU coreutils есть :

for i in /tmp/*/Default; do
  rm -R "$(dirname "$i")";
done

Может быть, есть findи другой подход. Я с ним не знаком, поэтому оставлю это вам и/или другим.

EDIT: Возможно, даже rm -R "$(dirname /tmp/*/Default)"сработает

решение3

Вы пробовали rm -d dirnameс *?

rm -d /tmp/*/Default

Просто ухожу с этого сайта:https://linuxize.com/post/rm-command-in-linux/

Связанный контент