Shell-Script
用於監視目錄和符號連結所有新創建的子目錄及其文件的 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
但是,問題是如果將文件添加到子目錄中,將直接在目標目錄中創建符號連結,而不是在其各自的子目錄中,我該如何糾正這個問題?
您需要使用目標目的地中的目錄路徑
#!/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
傳遞任何狀態更新)。