Как вывести список всех файлов на жестком диске с помощью функции «найти»?

Как вывести список всех файлов на жестком диске с помощью функции «найти»?

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

Формат идеи:

[file size] [last modified date] [absolute path] [ filename] 

Я пытался:

ls -lhR | awk -v PWD=$PWD '{printf("%4s %4s %2s %5s %s/%s\n", $5, $6, $7, $8, PWD, $9); }' >> /tmp/report.list 

Все работало отлично, пока не наткнулся на некоторые файлы/каталоги с пробелами между ними... Поэтому я попробовал:

find . -name "*" -exec du -sh {} \; -exec date -r {} \; -exec echo " " \; >> /tmp/report.list

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

Что я должен делать?

решение1

Вы можете использовать findдействие -printfдля непосредственного вывода этих атрибутов, например:

find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
  • %s: Размер файла в байтах.
  • %Tx: Время последнего изменения файла в формате даты, принятом в локали
  • %h: Ведущие каталоги имени файла
  • %P: Имя файла с именем аргумента командной строки, под которым он был обнаружен, удалено.

Путь к каталогу ( %h) выводится относительно аргумента пути командной строки, с которым findвызывается команда: при указании рабочего каталога с помощью $PWD, он становится абсолютным.

решение2

Вы можете использовать -printfопцию в поиске:

find / -type "f" -printf "%s\t%TY-%Tm-%Td\t%p\n" > file.txt

Это создает файл в формате:

[размер в байтах]TAB[Дата последнего изменения в формате ГГГГ-мм-дд]TAB[ПОЛНЫЙ ПУТЬ]

Он будет работать с полной файловой структурой.

Замените каждый \tпробелом, если вы не хотите, чтобы он был разделен табуляцией. Используя man findвы можете найти другие варианты форматирования для -printfопции в find.

Связанный контент