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

SD_*_*_NZ 3 command-line

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

我对 Ubuntu 不是特别精通,因此对每个命令项的解释也将不胜感激。

Seb*_*ark 7

用 bash

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

$ shopt -s globstar dotglob
$ stat -c '"%n",%s,%y' /media/disk1/**/* >disk1.csv
Run Code Online (Sandbox Code Playgroud)

shopt -s globstar dotglob打开 bash 的递归通配功能(启用“**”,请参阅https://unix.stackexchange.com/questions/49913/recursive-glob)。它还打开以 a 开头的文件的匹配,也.称为隐藏文件。

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
[...]
Run Code Online (Sandbox Code Playgroud)

我测试将生成的 csv 导入 libreoffice calc 并且它工作得很好,还有有趣的文件名和换行符。它可能会被带有双引号的文件名阻塞。

ARG_MAX

如果文件总数过高或所有文件名中的字符总数过高,上述命令将失败。对于小型驱动器(USB 拇指驱动器等),它应该足够了,但是如果您正在索引包含数百万个文件的大磁盘,您可能会达到该限制。

您可以改为运行以下命令,它将产生相同的输出(并且占用更少的内存):

find /media/disk1 -type f -print0 | xargs -0 stat -c '"%n",%s,%y' >disk1.csv
Run Code Online (Sandbox Code Playgroud)

对于“find .. -print0 | xargs -0 ..”模式,您会在这里找到很多答案,例如“xargs”和命令替换之间的区别?