inotifywait 不监控 Windows 用户保存到 Linux 上的 Samba 共享

inotifywait 不监控 Windows 用户保存到 Linux 上的 Samba 共享

inotifywait在 Linux 上(版本 3.14)监视与 Samba 版本 4.3.9-Ubuntu 共享的文件夹。

如果我将文件从 Linux 机器复制到 samba 共享(即在不同的机器上,也在 Linux 下),它就可以工作。

但如果我从 Windows 机器复制文件inotify将不会检测到任何内容。有空格或无空格、递归或非递归结果都是一样的。

printDir="/media/smb_share/temp/monitor"
inotifywait -m -r -e modify -e create "$printDir" |  while read line
do
    echo "$line"
done

有谁知道如何解决它?

答案1

好吧,这是一个丑陋的解决方法,但就我而言,它应该适用于大约 90% 的情况。

temPrint=/dev/shm/print
fcheck_1=$temPrint/fcheck_1
fcheck_new=$temPrint/fcheck_new
fcheck_old=$temPrint/fcheck_old
fcheck_preprint=$temPrint/fcheck_preprint
fcheck_print=$temPrint/fcheck_print
printDir="/media/smb_share/temp/monitor"

test -d $temPrint || mkdir $temPrint

while [ true ]; do
  test -e $fcheck_new && rm $fcheck_new
  test -e $fcheck_old || touch $fcheck_old
  test -e $fcheck_print && rm $fcheck_print

  ls -l "$printDir"/*.pdf > $fcheck_1
  while read line
  do
    echo "${line#*"/"}" | sed "s#^#/#" >> $fcheck_new
  done < $fcheck_1

  rt=$(diff $fcheck_new $fcheck_old | grep "<")
  if [ "$rt" ]; then
    echo "$rt" > $fcheck_preprint
    while read line
    do
      echo "${line#*"/"}" | sed "s#^#/#" >> $fcheck_print
    done < $fcheck_preprint

    while read line
    do
      echo "$line"
    done < $fcheck_print

    cp $fcheck_new $fcheck_old
  fi
  sleep 20
done

答案2

你应该给文件已更改一个机会

我刚刚使用 Windows 中安装的 CIFS 驱动器对其进行了测试。它的工作就像一个魅力,几乎没有延迟或服务器负载。

  • 安装:
    sudo apt-get install fileschanged
    
  • 监视您的主文件夹中是否有任何新文件或更改的文件
    fileschanged -s created,changed -t1 $PWD
    
  • 输出将如下所示:
    /mnt/winshare/DevRep/VMTest/trigger_test1 folder/test3
    /mnt/winshare/DevRep/VMTest/trigger_test1 folder/test3
    /mnt/winshare/DevRep/VMTest/trigger_test1 folder/test4
    

正如您所看到的,它也适用于路径内的空格。

相关内容