Найдите файлы, принадлежащие пользователю с размером в МБ на Ubuntu 12.04 (Точный Ящер)

Я использую эту команду, которая хорошо работает:

sudo find / -user web132 -ls

Но когда я пробую как

sudo find / -user web132 -ls -lh

Я получаю неправильную синтаксическую ошибку. Как я могу получить размеры файла, принадлежащие пользователю в МБ?

1
задан 22 June 2015 в 20:22

5 ответов

Необходимо использовать exec предикат find:

sudo find / -user web132 -exec ls -lh {} +

Это выполнит ls -lh под -exec предикат find и даст Вам вывод в человекочитаемом формате. Если Вы хотите произвести всегда в мегабайтах, Вам нужны некоторые дополнительные операции, -h опция в Вашем ls -lh предложение, чтобы Вы только хотели вывод в человекочитаемом формате.

4
ответ дан 3 December 2019 в 06:22
find / -size +100k -size -500M -user web132

Это означает находить файл больше, чем 100 КБ и меньшим, чем 500 МБ. -ls опция о том, как вывод отформатирован и имеет мало общего эти ls команда.

2
ответ дан 3 December 2019 в 06:22

Вот находка + awk + numfmt версия. Поскольку-ls является флагом для нахождения команды, не экземпляра ls, Вы не можете использовать - флаги люфтганзы также. Однако, если Вы настаиваете на том, чтобы использовать эти -ls флаг с находкой, мы можем также попробовать, форматируют размер файла в человекочитаемую форму. Размер файла в выводе find с флагом-ls является полем № 7, таким образом с помощью двухсторонний io awk, мы просто преобразовываем то поле в человекочитаемую форму и заменяем им назад.

find / -user web132 -ls | 
 awk '{ command="numfmt --to=iec "; command $7 | getline result; $7=result;print; close(command) }'

Вот пример с моей домашней папкой:

$ find . -maxdepth 1 -user xieerqi -ls | awk '{ command="numfmt --to=iec "; command $7 |& getline result; $7=result;print; close(command) }'   
3018363 4 drwxr-xr-x 43 xieerqi xieerqi 4.0K Jun 22 00:33 .
3409153 4 drwx------ 3 xieerqi xieerqi 4.0K Jun 22 00:33 ./.gconf
3018459 4 -rw-rw-r-- 1 xieerqi xieerqi 756 Jun 11 00:08 ./record
3018368 16 -rw------- 1 xieerqi xieerqi 13K Jun 21 23:14 ./.bash_history
3018364 12 -rw-r--r-- 1 xieerqi xieerqi 8.8K May 28 03:59 ./examples.desktop
3018535 4 -rw-rw-r-- 1 xieerqi xieerqi 64 Jun 21 16:04 ./testfile.txt
3018473 4 drwxrwxr-x 2 xieerqi xieerqi 64 Jun 16 23:28 ./netmanager

Примечание: из обсуждения в реве комментариев, кажется, что mawk имеет проблемы, но gawk (GNU awk) превосходные работы. Я выяснил подход для mawk, который просто использует замену 7$ не как аргумент, но как часть команды, это позже расширено. Вот то, что я имею в виду:

find . -maxdepth 1 -user xieerqi -ls | mawk '{command="numfmt --to=iec "$7; command | getline var; $7=var;print }'

1
ответ дан 3 December 2019 в 06:22

TL; DR find … -ls … не является тем же как ls. При необходимости в некоторых параметрах для ls, Вам нужна команда ls. И -lh не параметр для find, поэтому ошибка.

<час>

find … -exec … хороший вариант. Вы могли использовать также:

sudo find / -user web132 -print0 | xargs -0 ls -lh {}
0
ответ дан 3 December 2019 в 06:22

Можно распечатать размеры файлов в байтах с помощью find один с %s спецификатор формата:

find / -user web132 -printf "%p %s\n"

Так как Вы хотите размер в мегабайтах, давайте разделим последнее поле на 1024*1024 использования awk:

find / -user web132 -printf "%p %s\n" |  awk '{printf "%sB %fMB\n", $0, $NF/1048576.0}'

Таким образом, у Вас всегда будет вывод в мегабайтах, в отличие от этого, с ls -lh опция, которая будет использовать меньшие единицы для меньших файлов.

Существует также %k спецификатор, который будет использовать 1K блок, так альтернативно, можно использовать:

find / -user web132 -printf "%p %k\n" |  awk '{printf "%sB %fMB\n", $0, $NF/1024.0 }'
1
ответ дан 3 December 2019 в 06:22

Другие вопросы по тегам:

Похожие вопросы: