Я хотел бы перечислить все файлы на жестком диске, включая размер, дату последнего изменения и абсолютный путь.
формат идеи:
[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, и путь печати не является абсолютным путем к файлу.
Что мне делать?
Можно использовать find
-printf
действие для вывода тех атрибутов непосредственно, например,
find "$PWD" -printf '%s\t%Tx\t%h\t%P\n'
%s
: размер Файла в байтах. %Tx
: время последнего изменения Файла, в представлении даты локали %h
: Ведущие каталоги имени файла %P
: имя Файла с названием параметра командной строки, под которым это было найдено удаленным. путь к каталогу (%h
) печатается относительно параметра пути командной строки, с которым эти find
вызывается команда: путем определения рабочего каталога с помощью $PWD
, это становится абсолютным.
Можно использовать -printf
опция в находке:
find / -type "f" -printf "%s\t%TY-%Tm-%Td\t%p\n" > file.txt
Это делает файл с форматом:
[размер в байтах] ВКЛАДКА [В последний раз измененная дата в формате YYYY-mm-dd] ВКЛАДКА [ПОЛНЫЙ ПУТЬ]
Это будет работать на полной файловой структуре.
Замена каждый \t
с пространством, если Вы не хотите его разграниченная вкладка. Используя man find
можно найти другие параметры формата для -printf
опция в find
.