我正在尝试为不同的类组织目录,以便每个类都有一个待办事项文件夹。
像这样的东西:
|--classes/
| |--classOne/
| | |--todo/
| | | |--read.pdf
| | |--otherFiles.md
| |--classTwo
| | |--todo/
| | | |--read.pdf
| | |--otherFiles.md
| |--classThree
| | |--todo/
| | | |--read.pdf
| | |--otherFiles.md
我想知道是否可以有一个名todo_buffer
为此层次结构外部的文件夹,可以聚合来自所有单独todo
文件夹的数据。
可以只创建一个小型应用程序,但是是否有一个 UNIX 实用程序可以让我做到这一点?我沿着符号链接的思路思考。
答案1
stow
它将创建符号链接并维护它们。您必须运行它才能更新。但是您可以使用inotify-wait
, 来触发更新。
答案2
#!/bin/sh
mkdir -p todo_buffer
for todo in classes/class*/todo/read.pdf
do
class=${todo%/todo/read.pdf} # Get the name of
class=${class#classes/} # the class directory
ln -s "../$todo" "todo_buffer/$class-read.pdf"
done
该脚本应该在该classes
目录的父目录中运行。它只会创建一个todo_buffer
目录,然后继续循环每个类的子目录read.pdf
中的文件的路径名。todo
这假设classes
目录下面的目录结构如您所示,每个类都有一个名为 的子目录class<something>
。
对于每个read.pdf
文件,都会在目录中创建一个符号链接todo_buffer
。
符号链接指向../classes/.../todo/read.pdf
,即它相对于链接的位置。如果您需要链接的绝对路径名,请在对 的调用中替换../
为。$PWD/
ln -s
给定以下目录和文件:
.
|-- classes
| |-- class-1
| | |-- otherFiles.md
| | `-- todo
| | `-- read.pdf
| |-- class-2
| | |-- otherFiles.md
| | `-- todo
| | `-- read.pdf
| `-- class-3
| |-- otherFiles.md
| `-- todo
| `-- read.pdf
`-- script.sh
7 directories, 7 files
运行脚本将生成:
todo_buffer/
|-- class-1-read.pdf -> ../classes/class-1/todo/read.pdf
|-- class-2-read.pdf -> ../classes/class-2/todo/read.pdf
`-- class-3-read.pdf -> ../classes/class-3/todo/read.pdf
0 directory, 3 files
答案3
您能否进一步澄清您的要求和问题的背景?
您是否会在填充所有待办事项文件夹之后或之前使用“工具”来聚合您的 todo_buffer 文件夹,以便您更轻松地填充这些待办事项文件夹?
每个单独的待办事项文件夹是否包含相似的文件名(如示例所示)但实际内容不同?
符号链接可能是您正在寻找的(但我觉得您需要编写一个小脚本),但这实际上取决于您想要实现的目标。
符号链接的工作逻辑与复制或移动相同:
ln -s {src} {dst}
其中 {src} 是链接应指向的文件,{dst} 是符号名称。
假设所有文件都在 todo_buffers 中,并且您只想在每个 todo 文件夹中创建符号链接,然后:
cd {some path}/classes/classOne/todo
ln -s {path to todo_buffer}/todo_buffer/read.pdf read.pdf
cd {some path}/classes/classTwo/todo
ln -s {path to todo_buffer}/todo_buffer/read.pdf read.pdf
cd {some path}/classes/classThree/todo
ln -s {path to todo_buffer}/todo_buffer/read.pdf read.pdf
...