Сценарий оболочки для рекурсивного перечисления больших файлов в директории - PullRequest
2 голосов
/ 15 декабря 2010

Shell-скрипт для рекурсивного перечисления файлов в директории, что огромно.Я использую:

 find <path> -mtime +20 -exec ls -ls {} \; | sort -n -r | head -100 | awk '{print $10}'

Проблемы:

  • Медленное выполнение
  • У меня нет прав на чтение в нескольких подкаталогах

Есть ли лучший способ добиться этого?Я пытался:

du <path> | sort -n -r | head -n 100

Гораздо быстрее, но не так эффективно.

Ответы [ 4 ]

1 голос
/ 15 декабря 2010

du почти там, попробуйте

du -aS | sort -n -r | head -n 100

, который вернет вам только большие файлы, исключая любые каталоги

1 голос
/ 15 декабря 2010

find имеет удобную директиву -printf:

find . -type f -printf "%s\t%p\n" | sort -nr | head -n 100

1 голос
/ 15 декабря 2010

В зависимости от распределения по размеру файлов, которые находит find, вы можете использовать предикат -size, чтобы отсеять множество мелких рыб до того, как список будет сброшен на sort. Если вы регулярно этим пользуетесь, запишите, когда вы начнете получать менее 100 строк из head, и используйте это как указание на то, что пришло время снизить установленный вами предел размера find.

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

0 голосов
/ 27 декабря 2010

find -size + k -atime + -printf "% s, \ t% a, \ t% p \ n" | sort -nr

даст вам желаемый результат

здесь sike находится на КБ, а возраст - последнее время доступа.

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