我想创建我的主文件夹的文件清单(文件/文件夹名称、目录结构和文件元数据的列表)。我不希望保存文件的实际内容。
如何才能做到这一点(最好不使用终端)?
答案1
解决方案 1:仅元数据 [编辑]
因此,根据某人最近的编辑,您可能只想非定期备份文件系统结构和元数据。这可以轻松完成:
find /home/furioususer -ls
将列出目录中的所有文件和目录/home/furioususer
以及一些元数据。要将输出重定向到文件,/path/to/backups/file
请使用
find /home/furioususer -ls > /path/to/backups/file
您可能希望根据用户名和备份时间为文件赋予一些有意义的名称:
find /home/furioususer -ls > "/path/to/backups/furioususer.metadata.$(date +%F_%T%z)"
$(date +%F_%T%z)
告诉 shell 执行子命令date +%F_%T%z
并将其替换为该命令的输出。(继续尝试直接运行该命令以查看结果并试用它!)引号是必需的,以防止大多数特别的字符(例如空格和冒号)就像它们出现在日期字符串中一样,以免被误解。当然,您可以选择任何其他您认为合适的(通过编程生成的)文件路径。
-ls
你可以通过替换来调整你真正感兴趣的数据(例如大小、所有者、组、权限、mtime、atime)-printf <YOUR FORMAT STRING>
。有关该选项的详细信息,请查看手册. 文件路径、文件大小、所有者、访问权限和上次修改时间的示例:
find /home/furioususer -printf "%p: %s bytes, owned by %u, permissions %m, last change %t\n"
由于这可能会变得很大但又很容易压缩,你可以通过压缩器将其传输出去,例如xz
:
find /home/furioususer -ls | xz > "/path/to/backups/furioususer.metadata.$(date +%F_%T%z).xz"
您可以通过使用环境变量(形式${}
)来稍微概括一下这个命令,而不是硬编码您的主路径和用户名,然后 shell 将用它们各自的值替换它们:
find "${HOME}" -ls | xz > "/path/to/backups/${USER}.metadata.$(date +%F_%T%z).xz"
自动从中恢复是另一回事,但我不知道这会有什么用处,因为如果没有实际的文件数据,你几乎就无法恢复。
如果您不想每次都摆弄命令行,您可以使用图形文本编辑器创建一个 shell 脚本,并使用应用程序启动器编辑器指向它的应用程序启动器。
解决方案 2:似曾相识
… 提供各种备份选项 - 离线和在线 - 其中一些似乎适合您的需求。它还与 Nautilus 完美集成,因此您可以轻松查看和恢复文件的先前版本。我从未亲自尝试过,但不久前我深入研究了它的可能性。
解决方案 3:写时复制快照
我知道的最灵活、最节省资源的(离线)解决方案是将您的主目录放在文件系统体积¹并进行定期快照。上次我查看时(大约 1 年前),没有现成的工具可以做到这一点,我花了几个下午的时间修改、调整和测试其他人的 shell 脚本,以使它们按我想要的方式工作。
从技术上讲,如果您重复使用现有工作,整个部署可以在不亲自接触命令行的情况下完成,但由于实验状态,您可能会达到更容易做到这一点的程度。因此,我认为这对您来说不是合适的解决方案,但对其他人来说可能合适。
如果需要的话,我将提供包括我自己的在内的可行解决方案的代码、说明和链接。
¹ ext3/4 可以轻松转换为 Btrfs