各クラスにToDoフォルダがあるように、複数のクラスのディレクトリを整理しようとしています。
このような:
|--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フォルダを簡単に埋めるために、ToDoフォルダをいっぱいにした後または前にtodo_bufferフォルダを集計する「ツール」を使用しますか?
個々のToDoフォルダには、同じファイル名(例のように)が含まれていますが、実際の内容は異なりますか?
シンボリックリンクはあなたが探しているものかもしれませんが(しかし少しスクリプトを書く必要があるようです)、実際にはあなたが達成したい目標によって異なります。
シンボリックリンクはコピーまたは移動と同じロジックで動作します。
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
...