別のフォルダのファイルを集計するフォルダの作成

別のフォルダのファイルを集計するフォルダの作成

各クラスに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.pdftodo

これは、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フォルダを簡単に埋めるために、ToDoフォルダをいっぱいにした後または前にtodo_bufferフォルダを集計する「ツール」を使用しますか?

  2. 個々の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  
...  

関連情報