2012-04-09 3 views
37

Я ищу команду Unix для печати файлов с их размером. Я использовал это, но это не сработало.Найти файлы размером в Unix

find . -size +10000k -print. 

Я хочу напечатать размер файла вместе с файлом/каталогом.

+2

Этой команда дает мне 'найти: неизвестный предикат«-print.'' Я предполагаю '.' это на самом деле не существует. Точность важна. –

+0

Stack Overflow - это сайт для вопросов программирования и разработки. Этот вопрос кажется вне темы, потому что речь идет не о программировании или разработке. См. [Какие темы можно задать здесь] (http://stackoverflow.com/help/on-topic) в Справочном центре. Возможно, лучше сказать [Суперпользователь] (http://superuser.com/) или [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/). Также см. [Где я пишу вопросы о Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

ответ

37
find . -size +10000k -exec ls -sd {} + 

Если ваша версия find не будет принимать + обозначения (который действует скорее как xargs делает), то вы можете использовать (GNU find и xargs, так find вероятно поддерживает + все равно):

find . -size +10000k -print0 | xargs -0 ls -sd 

или вы можете заменить + на \; (и жить с относительной неэффективностью), или вы можете столкнуться с проблемами, вызванными пробелами в именах и использовать портативный компьютер:

find . -size +10000k -print | xargs ls -sd 

-d на ls команд гарантирует, что если каталог будет найдено (маловероятно, но ...), то информация каталог будет напечатан, а не файлы в каталоге. И, если вы ищете файлы размером более 1 МБ (в качестве предлагаемого комментария), вам необходимо настроить +10000k на 1000k или, возможно, +1024k или +2048 (для 512-байтовых блоков, по умолчанию для -size) , При этом будет указан размер и имя файла. Вы могли бы избежать необходимости в -d, добавив -type f в команду find, конечно.

+0

спасибо. Я использовал найти. -размер + 300000k -print | xargs ls -sd 2>/dev/null –

3

Предполагая, что вы GNU найти:

find . -size +10000k -printf '%s %f\n' 

Если вы хотите постоянной ширины для поля размера, вы можете сделать что-то вроде:

find . -size +10000k -printf '%10s %f\n' 

Обратите внимание, что -size +1000k выбирает файлы, по крайней мере 10240000 байты (k - 1024, а не 1000). Вы сказали в комментарии, что хотите файлы размером более 1 М; если это 1024 * 1024 байт, то это:

find . -size +1M ... 

будет делать трюк - за исключением того, что он будет также печатать размер и имя файла, которые точно 1024 * 1024 байт. Если это имеет значение, вы можете использовать:

find . -size +1048575c ... 

Вам нужно решить, какой критерий вы хотите.

+0

Вам понадобится 'c' после' + 1048575', чтобы получить байты (символы) вместо стандартных 512-байтовых блоков. –

+0

@JonathanLeffler: Исправлено, спасибо! –

7

Найти можно использовать для печати размера файла в байтах с% s как printf. % h /% f печатает префикс каталога и имя файла соответственно. \ n заставляет новую строку.

Пример

find . -size +10000k -printf "%h/%f,%s\n" 

Выхода

./DOTT/extract/DOTT/TENTACLE.001,11358470 
./DOTT/Day Of The Tentacle.nrg,297308316 
./DOTT/foo.iso,297001116 
+0

Интересно. Это должно быть документировано как расширение GNU (я полагаю) к стандарту POSIX ['find'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html). –

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