文件列表命令行(隐藏和子文件夹)

我需要从硬盘驱动器,包含的子文件夹中获取所有文件(隐藏和可见)的文本列表。 理想情况下,如果可能,列表将具有文件名,路径,大小和创建(或最后修改)日期。 有人可以告诉我我需要什么命令吗? 此外,是否可以将其创建为.csv文件或类似的东西,以便在Excel中使用?

我不是非常精通Ubuntu所以对每个命令项的解释也将非常感激。

随着bash

假设有问题的磁盘安装在/media/disk1

 $ shopt -s globstar dotglob $ stat -c '"%n",%s,%y' /media/disk1/**/* >disk1.csv 

shopt -s globstar dotglob打开bash的递归globbingfunction(允许使用’**’,请参阅https://unix.stackexchange.com/questions/49913/recursive-glob )。 它还会打开以a开头的文件匹配. ,als称为隐藏文件。

stat是用于获取文件元数据的程序。 基本上,该程序将针对磁盘上的每个文件运行。

-c '"%n",%s,%y'指定stat命令的输出格式。 %n是文件名,用双引号括起来, %s是文件大小, %y是最后修改时间。 (见stat --help

/media/disk1/**/*告诉bash将所有在该路径下找到的文件名传递给pogram(stat),对于普通文件和隐藏文件,因为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 

对于“find .. -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指定的格式返回文件的最后修改时间; 所以

    • %TDmm/dd/yy格式返回文件的最后修改时间
    • %Tr以格式time, 12-hour (hh:mm:ss [AP]M)返回文件的最后修改时间
  • / ,和\n打印斜线字符,逗号和\n ewline。

更多细节,请阅读man find-printf format部分。