2010-12-15 2 views
2

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

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

Вопросов:

  • Медленнее исполнение
  • Я не прочитав разрешения в несколько подкаталогов

Есть ли лучший способ для достижения этой цели? Я пробовал:

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

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

+0

попробуйте также ls -R, но все они будут использовать одни и те же системные вызовы внутри, поэтому должны иметь сопоставимую производительность. – bobah 2010-12-15 14:56:16

+0

`... ls -s ... awk '{print $ 2}'` может быть немного более портативным. – 2010-12-15 16:13:36

ответ

0

находку - size + k -atime + -printf "% s, \ t% a, \ t% p \ n" | sort -nr

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

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

1

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

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

1

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

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

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

1

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

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

Смежные вопросы