Команда Unix — для конкретной папки, список пользователей и размер файлов, включая вложенные папки

#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 о помощи!