ディレクトリを監視し、新しく作成されたすべてのサブディレクトリとそのファイルをシンボリックリンクするBashスクリプト

ディレクトリを監視し、新しく作成されたすべてのサブディレクトリとそのファイルをシンボリックリンクするBashスクリプト

フォルダを再帰的に監視し、各新しいファイルとサブディレクトリを別のフォルダにシンボリックリンクするには、bashスクリプトが必要です。

スクリプトはサブディレクトリとそのコンテンツを正しくシンボリックリンクします。

#!/bin/bash

inotifywait -r -m '/source_dir' -e create -e moved_to |
    while read dir action file; do
 cp -as $dir/$file /destination_dir/$file
done

しかし、問題は、サブディレクトリにファイルを追加すると、そのサブディレクトリではなくターゲットディレクトリに直接シンボリックリンクが作成されることです。この問題をどのように解決できますか?

答え1

ターゲットのディレクトリパスを使用する必要があります。

#!/bin/bash
#
src='/source_dir'
dst='/destination_dir'

inotifywait -r -m "$src" --format '%w%f' -e CREATE,MOVED_TO |
    while IFS= read -r item
    do
        # echo "Got $item"
        if [[ ! -d "$item" ]]
        then
            echo mkdir -p "${item%/*}"
            echo cp -as "$item" "$dst/${item#$src/}"
        fi
    done

echo期待どおりに機能すると満足している場合は、両方のプレフィックスを削除します。echo "Got $item"何が起こっているのかを確認するには、コメントを外してください。

inotifywait改行文字を含むファイルまたはディレクトリ名を処理するためにこの方法を使用できないことに注意してください\000\001--format$'...'inotifywait

関連情報