フォルダを再帰的に監視し、各新しいファイルとサブディレクトリを別のフォルダにシンボリックリンクするには、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