Командная строка списка файлов (скрытый и подпапки)

Я должен получить текстовый список всех файлов (скрытый и видимый) от жесткого диска, включенные подпапки. Идеально список имел бы имя файла, путь, размер и создание (или в последний раз измененный) дата, если это возможно. Кто-то может сказать мне, что управляет, чтобы мне было нужно? Кроме того, это возможный создать это как a .csv файл или что-то подобное для использования в Excel?

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

3
задан 25 April 2018 в 23:51

2 ответа

С ударом

Принятие рассматриваемого диска смонтировано под /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, и он работал приятно, также с забавными именами файлов с разрывами строки в них. Это будет, вероятно, дросселировать на именах файлов с двойными кавычками в них.

ARG_MAX

Вышеупомянутая команда перестанет работать, если общее количество файлов будет слишком высоко, или общее количество символов во всех именах файлов слишком высоко. Для маленьких дисков (карты флэш-памяти USB и т.д.) это должно быть достаточно, но если бы Вы индексируете большой диск с миллионами файлов, Вы, вероятно, поразили бы тот предел.

Можно выполнить следующее вместо этого, это произведет тот же вывод (и съест меньше памяти):

find /media/disk1 -type f -print0 | xargs -0 stat -c '"%n",%s,%y' >disk1.csv

Для "находят..-print0 | xargs-0.." шаблон Вы уже будете находить много ответов здесь, например, Различие между "xargs" и управлять заменой?

7
ответ дан 1 December 2019 в 13:05

С 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 \newline соответственно.

больше деталей, читайте в man find и -printf format раздел.

4
ответ дан 1 December 2019 в 13:05

Другие вопросы по тегам:

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