多年来使用多个 SQL 和 NoSQL 数据库后,我觉得确保以数据为中心的个人应用程序的可移植性的最佳方法是完全避免使用所有真正的数据库。我认为文件系统是一个漂亮的数据库范式,它是可移植的、人类可读的,因此对于我正在编写的个人应用程序类型来说,它具有足够的寿命。它就像一个图数据库,它强制执行树结构(适用于分区),用符号链接来表示多对一关系。
有没有办法将整个文件系统拓扑导出为单个文件?find命令的输出很有希望,但没有标准化的方法来导出指示符号链接指向什么的数据。我不想提出我自己个人选择的find输出格式,例如:
/home/me/photos/beach/me_and_my_dog.jpg -> /home/me/photos/beach/1.jpg
Run Code Online (Sandbox Code Playgroud)
如果之前有人做过建立文件系统拓扑导出格式的工作。
另一个候选是一个 JSON 文件:
home : [{
me : [{
photos : [{
beach : [{
1.jpg,
{ me_and_my_dog.jpg : ./1.jpg }
}]
}]
}
}]
Run Code Online (Sandbox Code Playgroud)
但同样有多种表示文件类型的方法,我想知道是否有人已经完成了建立标准的工作。
请注意,我不希望导出文件的内容 - 这会使导出比需要的大得多。
作为了解如何使用管道操作绑定优先级的一种工具,我试图为每个目录打印一个文件的路径:
find $PWD -type d | xargs --delimiter "\n" -I% -n 1 (find % -maxdepth 1 | head -1)
Run Code Online (Sandbox Code Playgroud)
我明白了no matches found: (find % -maxdepth 1 | head -1)。没有括号我会得到xargs: find: terminated by signal 13所以我很确定我们需要以某种方式使管道右关联。
如何将 xargs 输入传递给包含管道的命令?(请不要告诉我使用-exec,我想学习如何操作其他问题的绑定优先级)。
有时您需要断开并重新连接已损坏的挂载,并且不想断开连接并重新连接整个 fstab 条目列表。
这是可能的,而不必基本上重新运行 fstab 抽象掉的完整底层挂载命令?就像是:
mount /Videos
Run Code Online (Sandbox Code Playgroud)
其中 fstab 包含:
//admin@192.168.1.4/Videos$ /Videos smbfs nodev,nosuid,auto
Run Code Online (Sandbox Code Playgroud)
我宁愿不复制和粘贴整个 fstab 条目并修改它以使用 mount -o syntax
第一个管道工作正常(打印“c”):
echo "a" | sed 's/a/b/' | sed 's/b/c/'
Run Code Online (Sandbox Code Playgroud)
这个不符合我的预期(当我将“a”输入到我的 fifo 中时没有打印任何内容):
mkfifo fifo;
cat fifo | sed 's/a/b/' | sed 's/b/c/'
Run Code Online (Sandbox Code Playgroud)
但是,如果我从后一个管道中删除第二个“sed”命令,则会打印“b”。我认为我对管道和重定向的理解太简单了。有人可以向我解释如何解决第二种情况,以便我可以对 fifo 的内容运行两个连续的命令吗?
(请注意,这不是特定于 fifo 的问题,netcat 也会出现相同的行为。我发布了一个关于 netcat的类似问题,但没有得到答案)
cat <(shuf my_ordered_playlist.m3u)echo <(shuf my_ordered_playlist.m3u)vlc my_ordered_playlist.m3uvlc <(shuf my_ordered_playlist.m3u)--random提供了较差的支持)。<<<吗?