#shell #unix
#оболочка #unix
Вопрос:
Я хотел бы иметь Unix
команду для перечисления всех пользователей вместе с размером файла, включая подкаталоги, для указанной папки, т.Е. Если указанная папка /test/kaustav
, я хотел бы знать пользователей и соответствующие размеры файлов, включая подкаталоги в /test/kaustav
Я пробовал следующее
ls -l option
(это не дает мне информацию о подкаталогах)
ls -lR
(когда я направляю вывод в файл, вывод получается очень беспорядочным)
любая помощь здесь будет высоко оценена.
Комментарии:
1. Итак, как бы вы хотели, чтобы вывод отображался?
2. И какую ОС вы используете?
3. Вам нужен единый список содержимого
/test/kaustav
с владельцами и размерами, включая подкаталоги, или вам нужен рекурсивный список, который просто показывает каждый файл на каждой глубине каталога?4. отметьте — мне нужен единый список содержимого /test/kaustav с владельцами и размерами, включая подкаталоги
Ответ №1:
Если в именах ваших файлов / каталогов нет специальных символов (например, пробелов), вы можете использовать
ls -l `find . -type f`
.
это каталог, с которого вы хотите его запустить (текущий каталог, в данном примере)
Комментарии:
1. Если это решение, почему бы не просто
find . -type f -ls
?2. Найти. -введите f -ls ….. это не работает . Ошибка не выдается, но скрипт продолжает работать
Ответ №2:
Я понимаю, что вам нужен размер файла вместе с его владельцем: вы можете сделать:
find . -print0 | xargs -0 stat -c " %U %s %n"
который будет отображаться рекурсивно из текущего каталога: размер файла владельца.
Вы также можете отсортировать его по размеру файла и по-прежнему показывать владельца и файл:
find . -print0 | xargs -0 stat -c " %U %s %n" | sort -n -k 2,2
Редактировать:
Итак, вы хотите получить размеры каталогов, но не хотите печатать рекурсивно?
find . -maxdepth 1 -print0 | xargs -I {} -0 sh -c "stat -c %U "{}"; du -s "{}"" | awk 'NR%2{printf $0" ";next;}1' | sort -n -k 2,2
Если вы хотите получить владельца и размер рекурсивно, просто удалите -maxdepth 1 . Когда вы указываете «включая подкаталоги», неясно, хотите ли вы это только для размера файла или для списка.
Комментарии:
1. это снова дает исчерпывающий список… ls -l работает нормально, но когда дело доходит до каталогов, он просто выдает 4096 или какое-то число меньше 4096 … есть ли способ, которым я могу получить размер каталога вместе с параметром ls -l.
2. Эмильен спасибо, что попробовали это …. да, вы меня правильно поняли, т.е. я хотел бы напечатать владельца и размеры файлов для каждого файла и каталогов внутри папки / kaustav / test … я получаю синтаксическую ошибку при попытке выполнить приведенную выше команду (неожиданный EOF при поиске соответствия ‘»»‘). Простите меня за мои ограниченные знания в unix, но я надеюсь добраться туда
3. Эмильен — я думаю, это работает… я предполагаю, что вы отобразили размер в килобайтах.. Пожалуйста, поправьте меня, если я ошибаюсь….
4. Вы правильно догадались, если вам нужен размер в байтах, вы можете передать параметр -b команде du . Хотя, вероятно, есть более простое решение, чем то, которое я дал, оно работает для меня, поэтому либо я что-то упускаю, либо вы копируете что-то неправильно. Я предлагаю вам поэкспериментировать с командой ‘du’, которая позволяет рекурсивно получать размер каталогов (например, просто попробуйте
du -b -s *
) и не забудьтеman du
о помощи!