1

Я хотел бы рассчитать размер файла дерева каталогов, но я также хочу игнорировать все PDF-файлы и изображения. По сути, я пытаюсь выяснить, каков размер текстовых файлов.

Как я могу это сделать?

Примечание: это в среде Linux, в частности RedHat

1 ответ1

0

Рассмотрим структуру каталогов следующим образом:

$ ls -sR1
.:
total 32
4 1/
4 2/
4 m
4 n
4 o
4 x.pdf
4 y.pdf
4 z.pdf

./1:
total 0

./2:
total 8
4 a/
4 p

./2/a:
total 4
4 q

Затем, чтобы получить список всех файлов, которые не соответствуют *.pdf , мы можем сделать

$ find . -type f \( ! -name '*.pdf' \)

чье расширение тоже не совпадает, скажем, *.jpg довольно очевидно. Затем используйте du следующим образом:

$ du -c $(find . -type f \( ! -name '*.pdf' \))
4   ./o
4   ./m
4   ./n
4   ./2/a/q
4   ./2/p
20  total

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

Ограничения этого подхода:

  1. Это не будет работать, если ваше дерево каталогов очень большое, потому что
    • Потому что он дважды сканирует дерево (find + du)
    • Потому что он передает вывод find в du через командную строку и, таким образом, ограничен максимально допустимым для этого размером.
  2. Он (при таком наивном подходе) будет сопоставлять только файлы на основе их имен, а не их содержимого.

Вы можете преодолеть 1., используя find для выполнения du для каждого отдельного файла, а затем используйте awk или что-то подобное, чтобы сложить все это. 2. может быть решена путем более интригующих проверок в find , возможно, на основе вывода file для каждого файла и сопоставления его с положительным или отрицательным списком.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .