Я должен получить текстовый список всех файлов (скрытый и видимый) от жесткого диска, включенные подпапки. Идеально список имел бы имя файла, путь, размер и создание (или в последний раз измененный) дата, если это возможно. Кто-то может сказать мне, что управляет, чтобы мне было нужно? Кроме того, это возможный создать это как a .csv
файл или что-то подобное для использования в Excel?
Я не являюсь супер опытным с Ubuntu, таким образом, объяснение каждого объекта команды также значительно ценилось бы.
Принятие рассматриваемого диска смонтировано под /media/disk1
:
$ shopt -s globstar dotglob
$ stat -c '"%n",%s,%y' /media/disk1/**/* >disk1.csv
shopt -s globstar dotglob
включает рекурсивную globbing функцию удара (включает использование '**', см. https://unix.stackexchange.com/questions/49913/recursive-glob). Это также включает соответствие файлов, запускающихся с a .
, Альс известен как скрытые файлы.
stat
программа, используемая для получения метаданных файла. В основном эта программа будет запущена для каждого файла на диске.
-c '"%n",%s,%y'
указывает выходной формат для команды статистики. %n
имя файла, включенное в двойные кавычки, %s
размер файла, %y
время последнего изменения. (см. stat --help
)
/media/disk1/**/*
говорит удару вручать все имена файлов, рекурсивно найденные под тем путем к pogram (статистика), для обоих, нормальных и скрытых файлов, так как dotglob включен.
>disk1.csv
вывод перенаправлений в файл, названный disk1.csv.
Вывод в disk1.csv будет похож на это для моего дома, например:
$ stat -c '"%n",%s,%y' /home/seb/**/*
"/home/seb/111",82,2018-03-26 18:38:04.048099912 +0200
"/home/seb/app",4096,2017-07-13 23:39:06.509862769 +0200
"/home/seb/Applications",4096,2018-03-14 20:20:48.552005660 +0100
"/home/seb/Applications/arduino-1.8.2",4096,2017-05-29 20:45:01.184017517 +0200
"/home/seb/Applications/arduino-1.8.2/arduino",946,2017-03-22 13:32:41.000000000 +0100
[...]
Я протестировал для импорта получающегося csv в libreoffice calc, и он работал приятно, также с забавными именами файлов с разрывами строки в них. Это будет, вероятно, дросселировать на именах файлов с двойными кавычками в них.
Вышеупомянутая команда перестанет работать, если общее количество файлов будет слишком высоко, или общее количество символов во всех именах файлов слишком высоко. Для маленьких дисков (карты флэш-памяти USB и т.д.) это должно быть достаточно, но если бы Вы индексируете большой диск с миллионами файлов, Вы, вероятно, поразили бы тот предел.
Можно выполнить следующее вместо этого, это произведет тот же вывод (и съест меньше памяти):
find /media/disk1 -type f -print0 | xargs -0 stat -c '"%n",%s,%y' >disk1.csv
Для "находят..-print0 | xargs-0.." шаблон Вы уже будете находить много ответов здесь, например, Различие между "xargs" и управлять заменой?
С GNU найдите:
find /path/to -type f -printf '%f,%h/,%s,%TD %Tr\n' > all-files.csv
%f
возвратите имя файла с любыми ведущими удаленными каталогами (только последний элемент).%h
возвраты ведущие каталоги имени файла (все кроме последнего элемента).%s
размер файла возвратов в байтах. %Tk̲
время последнего изменения файла возвратов в формате, указанном k ̲; так
%TD
время последнего изменения файла возвратов в формате mm/dd/yy
%Tr
время последнего изменения файлов возвратов в формате time, 12-hour (hh:mm:ss [AP]M)
/
, ,
и \n
печать режет символ, запятую и a \n
ewline соответственно.
больше деталей, читайте в man find
и -printf format
раздел.