Я использую эту команду, которая хорошо работает:
sudo find / -user web132 -ls
Но когда я пробую как
sudo find / -user web132 -ls -lh
Я получаю неправильную синтаксическую ошибку. Как я могу получить размеры файла, принадлежащие пользователю в МБ?
Необходимо использовать exec
предикат find
:
sudo find / -user web132 -exec ls -lh {} +
Это выполнит ls -lh
под -exec
предикат find
и даст Вам вывод в человекочитаемом формате. Если Вы хотите произвести всегда в мегабайтах, Вам нужны некоторые дополнительные операции, -h
опция в Вашем ls -lh
предложение, чтобы Вы только хотели вывод в человекочитаемом формате.
find / -size +100k -size -500M -user web132
Это означает находить файл больше, чем 100 КБ и меньшим, чем 500 МБ. -ls
опция о том, как вывод отформатирован и имеет мало общего эти ls
команда.
Вот находка + 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 }'
TL; DR find … -ls …
не является тем же как ls
. При необходимости в некоторых параметрах для ls
, Вам нужна команда ls
. И -lh
не параметр для find
, поэтому ошибка.
find … -exec …
хороший вариант. Вы могли использовать также:
sudo find / -user web132 -print0 | xargs -0 ls -lh {}
Можно распечатать размеры файлов в байтах с помощью 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 }'