Как освободить место на диске, удалив все файлы и жесткие ссылки?

Как освободить место на диске, удалив все файлы и жесткие ссылки?

Я уже несколько часов пытаюсь это понять, но, похоже, не могу.

Мой вопрос: у меня есть имя файла easy и в нем 4 разных подкаталога. введите описание изображения здесь

Теперь мне нужно удалить все из foo (включая жесткие ссылки) и освободить все дисковое пространство foo.

Я попробовал удалить все файлы, введя команду.

rm foo/*

но он не удаляет жесткие ссылки, находящиеся в других подкаталогах.

Затем я попытался проверить, совпадают ли иноды

найти foo -type f -ls | сортировать

и вот что я получил с помощью этой команды

введите описание изображения здесь

эта команда не показывает другие подкаталоги, только foo/

Может кто-нибудь мне помочь? Спасибо.

решение1

Если вы хотите удалить все файлы, которые жестко связаны с любым из файлов, найденных с помощью нисходящего поиска foo, с помощью инструментов GNU, вы можете сделать следующее:

dir=foo
mountpoint=$(df --output=target -- "$dir" | tail -n +2)

awk -v RS='\0' -v ORS='\0' '
  ARGIND == 1 {inum[$0]; next}
  {i=$0; getline}
  i in inum
 ' <(find -- "$dir" -xdev ! -type d -links +1 -printf '%i\0') \
   <(find -- "$mountpoint" -xdev ! -type d -printf '%i\0%p\0') |
  xargs -r0 rm -f

rm -rf -- "$dir"

Это предполагает GNU df, GNU awk, GNU findи оболочку, подобную GNU shell ( bash), которая поддерживает подстановку процессов ( <(...)).

Это также предполагает, $dirчто не начинается с предиката -или не является им find(например !, (...).

Выше мы ищем файлы во всей файловой системе, $dirкоторая принадлежит. Вы можете заменить $mountpointтолько родительский каталог $dir( .в данном случае) или другойподкаталоги( 123 ABC defздесь), если вы знаете, все жесткие ссылки находятся только там.

В приведенном выше коде мы записываем номера инодов всех файлов, не являющихся каталогами, с числом ссылок больше 1, которые найдены с помощью нисходящего $dir. И ищем эти номера инодов во всей файловой системе (по крайней мере, в тех ее разделах, которые не замаскированы другими файловыми системами и на которые у вас есть разрешения на обход). Номера инодов уникальны только для каждой файловой системы, поэтому мы используем , -xdevчтобы убедиться, что мы сканируем только ту файловую систему, $dirв которой она найдена.

решение2

rm -rf foo

rm- удалить файлы или каталоги.

  • -fигнорировать несуществующие файлы и аргументы, никогда не запрашивать.
  • -rрекурсивно удалить каталоги и их содержимое.

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