Мне нужно удалить ряд папок в 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/