du: Следуйте символическим ссылкам, если символическая ссылка указывает на внешние каталоги, иначе не следует - PullRequest
0 голосов
/ 13 января 2019

Интересно, есть ли какое-то довольно простое заклинание оболочки для расчета использования диска каталогом (с помощью команды du), но с учетом следующих требований: символьные ссылки, указывающие на файлы / подкаталоги внутри каталога, не должны соблюдаться, но ссылки на внешние файлы / подкаталоги должны. Или мне нужно сделать некоторые сценарии для достижения этой цели.

1 Ответ

0 голосов
/ 13 января 2019

Если я не пропустил что-то в вашем вопросе, du уже делает это, когда получает указание следовать символическим ссылкам (-L).

У меня есть два дерева:

tree1/

├── dir1
│   └── file
├── dirA -> ../tree2/dirA
└── link1 -> dir1

и tree2/:

.
└── dirA
    └── file

В обоих случаях размер файла составляет 1 МБ.

Теперь запустите du -shL на tree1/:

$ du -shL tree1
2.0M    tree1

Хотя файл можно увидеть три раза в tree1/ при следующих символических ссылках:

$ find tree1 -follow -type f
tree1/dirA/file
tree1/link1/file
tree1/dir1/file

Это только засчитывается дважды к общему количеству. А именно один раз из tree1/ и один раз связанный с tree2/dirA/ (или то, что я понял как вы подразумеваете извне / не являясь подкаталогами tree1/).

Казалось бы, имеет смысл, потому что, будучи ссылками внутри одного дерева, они на самом деле не занимают дополнительного дискового пространства (кроме записи символической ссылки).


Я также немного увеличил tree1 до:

.
├── dir1
│   └── file
├── dir2
│   └── file -> ../dir1/file
├── dirA -> ../tree2/dirA
└── link1 -> dir1

И побежал:

$ du -abcL .
1048576 ./dir2/file
1048636 ./dir2
1048576 ./dirA/file
1048636 ./dirA
60      ./link1
2097452 .
2097452 total

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

Это то, что вы хотели или достаточно близко?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...