创建一个聚合其他文件夹中的文件的文件夹

创建一个聚合其他文件夹中的文件的文件夹

我正在尝试为不同的类组织目录,以便每个类都有一个待办事项文件夹。

像这样的东西:

|--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

您能否进一步澄清您的要求和问题的背景?

  1. 您是否会在填充所有待办事项文件夹之后或之前使用“工具”来聚合您的 todo_buffer 文件夹,以便您更轻松地填充这些待办事项文件夹?

  2. 每个单独的待办事项文件夹是否包含相似的文件名(如示例所示)但实际内容不同?

符号链接可能是您正在寻找的(但我觉得您需要编写一个小脚本),但这实际上取决于您想要实现的目标。

符号链接的工作逻辑与复制或移动相同:

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  
...  

相关内容