Рекурсивно выводить имя файла и размер файла для всех подкаталогов?

Я отправился с , назначив локальные группы пользователям через pam_group, чтобы получить ту же функциональность. В /etc/security/groups.conf я добавил следующую строку

*;*;%administrators;Al0000-2400;adm,sudo,lpadmin

Таким образом, любой пользователь LDAP, принадлежащий к группе LDAP администраторы , будет сопоставлен с локальными группами adm , sudo и lpadmin в поле. Кажется, проще, чем установить sudo-ldap , если я не упускаю чего-либо?

-121--55256-

Невозможно добавить haveded в контейнер, так как он совместно использует ядро с хостом.

-121--246453-

Вы можете запустить sudo pkill Xorg , который убьет сервер X11, который затем перезапустится для приглашения входа.

Эти методы проще, проще запомнить и универсальнее, чем перезапуск базовой службы. Служба может изменяться в зависимости от выбранного дистрибутива Linux, выпуска или графической среды, но имя сервера X гораздо более стабильно; он не менялся с десяти лет.

Если вы хотите восстановить незавершенную работу, вместо уничтожения X-сервера, который немедленно уничтожит все X-клиенты (приложения), вы можете определить фиктивную программу, которая заморозила ваш рабочий стол, обычно это приложение или настольный компонент, который захватил мышь и сохранил ее, и убить или перезапустить этот точный компонент. С Mint 17,2 и рабочим столом Приятеля это часто происходит со мной с матпанелью .

3
13.03.2018, 18:51
5 ответов

Попробуйте это (, предполагая, что GNU findи имена файлов не содержат двойных кавычек):

{
    printf '%s\t%s\n' size path
    find / \( -path /proc -o -path /sys \) -prune -o -printf '%s\t"%P"\n' |
        numfmt --to=iec
} > outputfile.csv

Проверить

man find | less +/'-printf format'

или

info --ind=-printf find
4
27.01.2020, 21:08
sudo du -h / 2>/dev/null > out.csv
  • Используйте sudo, чтобы убедиться, что вы прочитали все файлы.
  • Используйте -hс duдля формата «h человекочитаемый».
  • Не отображать ошибки (2>/dev/null, где 2— стандартная ошибка)
  • Отправить результаты в файл(> out.csv).

Это создает список с размером файла и путем, с табуляцией между значениями.

6
27.01.2020, 21:08

С GNU statиbashglobstar:

shopt -s globstar
stat --printf="%s\t%n\n" -- ** | numfmt -d $'\t' --to=iec >out.csv

Это включает каталоги, но это тоже файлы...

Как указывает @Patrick, это может привести к argument list too longиз-за **. Можно было бы использовать findвместо:

sudo find / -type f -exec stat --printf="%s\t%n\n" -- {} \; | numfmt -d $'\t' --to=iec
1
27.01.2020, 21:08

Примечание. :Приведенная ниже команда делает немного больше, чем вы просили, но может оказаться чрезвычайно полезной для других людей.


Вот команда, которую мы разработали с коллегой и передали группам поддержки приложений, которым необходимо работать с полными дисками:

find / -xdev \! -path /var/log/lastlog -printf '%s\t%p\n' | sort -rn | head | cut -f2- | xargs -n1 ls -lh | awk '{print $5, $NF}'

Вот та же команда с разрывами строк для облегчения чтения:

find / -xdev \! -path /var/log/lastlog -printf '%s\t%p\n' |
  sort -rn | head | cut -f2- |
  xargs -n1 ls -lh | awk '{print $5, $NF}'

Эта команда выводит 10 самых больших файлов в корневой файловой системе, а также удобочитаемый -размер файла для каждого из них.

Для получения точных результатов эту команду необходимо запустить от имени пользователя root .

-xdevпозволяет избежать пересечения границ файловой системы, что может быть важно, если NFS может работать медленно.

/var/log/lastlogигнорируется, так как это разреженный файл, который ложно сообщает об огромном размере (, т. е. не вызывает проблем с заполнением диска ).

-printfспецифичен для GNU find. В этом случае он печатает размер файла в байтах, за которым следует полный путь к файлу.

На самом деле вы можете оставить все после команды head, и единственное, что вы потеряете, — это размеры файлов, -удобочитаемые для человека.

Так что следующее работает отлично:

find / -xdev \! -path /var/log/lastlog -printf '%s\t%p\n' | sort -rn | head

Эта команда не работает , если у вас есть имена файлов с символами новой строки. Но так как эта команда предназначена для ручной обработки человеком-оператором (, а не для использования в сценариях ), это не имеет решающего значения.


Теперь, чтобы ответить на ваш конкретный вопрос:

My goal is to measure the file size (in MB or GB) for every file on my Linux system, recursively recording the filename and filesize, and piping the output into a tab-delimited text file.

Я проигнорирую требование МБ или ГБ и просто сообщу размер файла в байтах, так как это НАМНОГО, НАМНОГО проще сделать. См. команду выше, чтобы узнать, как это сделать, если вам действительно нужно.

sudo find / -printf '%s\t%p\n' > outputfile.txt
2
27.01.2020, 21:08

Вы должны проверить ncdu , который представляет собой команду duс ncurses, которая по умолчанию получает размер файла всех папок.

2
27.01.2020, 21:08

Теги

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