Shell-Script

用於監視目錄和符號連結所有新創建的子目錄及其文件的 Bash 腳本

  • November 10, 2020

我需要一個 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

但是,問題是如果將文件添加到子目錄中,將直接在目標目錄中創建符號連結,而不是在其各自的子目錄中,我該如何糾正這個問題?

您需要使用目標目的地中的目錄路徑

#!/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傳遞任何狀態更新)。

引用自:https://unix.stackexchange.com/questions/618816