Как удалить каталог, содержащий только '.' и '..', но rm говорит, что это не пусто?

С помощью Google Crush Tools 'subtotal:

$ sort --key 2 yourFile.txt | subtotal --key 2 --sum 1 --delim ' '

7 GeneA
9 GeneA
16 

2 GeneB
2 GeneB
4 

6 GeneC
6 

10
16.01.2020, 06:26
6 ответов

Если выуверены, чтохотите удалить каталог Contents, вы можете использовать:

sudo rm -r -f Contents

При этом будет передан рекурсивный параметр (, который удаляет каталоги, предварительно рекурсивно удаляя содержимое ), и будет использоваться принудительный параметр (, который игнорирует -несуществующие файлы и отменяет любые запросы подтверждения ).

Обратите внимание, что этонельзя отменить.

(для получения дополнительной информации используйте rm --helpили см.http://www.gnu.org/software/coreutils/manual/html_node/rm-invocation.html#rm-invocation)

-3
27.01.2020, 19:59

Ваш каталог выглядит пустым, но вывод lsпоказывает, что там находится файл, поскольку количество ссылок для каталога равно 3, а не 2 (пустой каталог в файловой системе APFS должен иметь счетчик ссылок, равный 2 ).

Это означает, что вашей файловой системе удалось перейти в несогласованное состояние и что вам, вероятно, следует запустить fsckна ней. В macOS это делается путем запуска первой помощи диска через приложение «Дисковая утилита».Если проблема связана с вашим основным загрузочным диском (, который часто называют «Macintosh HD», по крайней мере, по умолчанию ), вам следует сделать это в режиме восстановления.

Если это та же проблема, с которой я столкнулся , то она скорее всего будет решена, если сначала убедиться, что вы используете последнюю версию macOS (где-то в прошлом Март 2019 г. )перед выполнением первой помощи на диске в режиме восстановления.

Чтобы войти в режим восстановления, нажмите Cmd+R сразу после перезагрузки компьютера. В режиме восстановления вам будет предложено запустить «Дисковую утилиту» из меню.

31
27.01.2020, 19:59

В Linux, если вы создаете папку в любом месте от имени пользователя root или пользователя в пользовательском каталоге, есть 2 каталога по умолчанию, созданные системой, которые. и.. которые скрыты и их вообще нельзя убрать/удалить.

(. )обозначает текущую папку, а (... )предыдущую папку. (. )вам нужно, если вы хотите выполнить скрипт из текущего каталога (.. )вам нужно, когда вы хотите перейти в предыдущий каталог, а не использовать абсолютный путь каталога каждый раз, используя команду #cd.

Вы можете удалить скрытые каталоги, созданные пользователем, если у вас есть соответствующее разрешение или вы используете учетные данные root.

-3
27.01.2020, 19:59

Записи каталога .и ..являются артефактом начала 1970-х годов, когда UNIX работала на крошечных машинах, и код тоже должен был быть крошечным.

Таким образом, люди создали настоящие жесткие ссылки на каталоги с именами .и ... Эта плохая идея приводит к тому, что счетчик жестких ссылок пустого каталога равен 2.

Сегодня это чепуха, а определение POSIX с 1988 года состоит в том, что эти записи не должны существовать. Их поведение просто нужно подражать. Это означает, что если .или ..появляются в имени пути, файловая система просто должна вести себя правильно.

Современные файловые системы не имеют записей .или ..в каталогах и не имеют счетчика жестких ссылок, равного 2, для пустого каталога.

ZFS реализована таким образом, но симулирует историческое поведение, чтобы избежать сбоя плохо написанных программ. Таким образом, ZFS поставляет .и ..с readdir(), хотя этих записей не существует.

Независимо от того, используете ли вы современную файловую систему или историческую файловую систему, вы не можете удалить эти записи.

Теперь на счет вашей ссылки 2....

В исторической файловой системе ОС обычно считает, что каталог с количеством ссылок > 2 имеет вложенные -каталоги и поэтому не может быть удален.

Если количество ссылок в вашем каталоге не является результатом скрытого «каталога атрибутов» для перечисленных расширенных файлов атрибутов, это должно быть результатом ошибки в файловой системе.

Если ваша ОС не позволяет удалить этот каталог с помощью программы unlinkвместо rm, будучи root, вам нужно запустить fsck.

9
27.01.2020, 19:59

Попробуйте перезагрузить компьютер. Возможно, у вас есть процесс, в котором все еще открыт удаленный файл в каталоге Contents. Перезагрузка освободит файл, и вы сможете удалить каталог.

0
27.01.2020, 19:59

Мое первое предположение состоит в том, что у вас есть файлы, которые были удалены, но остаются открытыми из-за запущенного процесса. Используйте sudo lsof | grep Contents-, это должно дать вам все PID, в которых открыты файлы с именами, содержащими слово «Содержимое». Вот первые несколько строк вывода, чтобы показать вам заголовки:

$ sudo lsof | head
COMMAND    PID  TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1                  root  cwd       DIR              253,1      4096          2 /
systemd      1                  root  rtd       DIR              253,1      4096          2 /
...

Когда вы избавитесь от процесса, который держит что-то открытым в вашем каталоге, вы сможете его удалить.

5
27.01.2020, 19:59

Теги

Похожие вопросы