특정 USB 드라이브를 삽입하면 실행되도록 스크립트가 설정되어 있습니다. USB 드라이브의 폴더를 백업 폴더로 복사하고, 이 폴더가 이미 존재하는 경우 덮어쓰도록 되어 있습니다. 그러나 USB 드라이브를 연결하면 폴더가 생성되지만 파일은 복사되지 않습니다.
내 .rules는 다음과 같습니다.
ACTION=="add", ATTR{idVendor}==Vendor, ATTR{idProduct}==Product, RUN+="/bin/sh /path/to/file/mkBackup"
내 파일 mkBackup은 다음과 같습니다.
#!/bin/bash
a="/path/to/file/Backup"
if [ -e $a ]; then
rm -rf $a
fi
mkdir $a
cp -r /path/to/usb/folder $a
으로 실행하면 udev
Backup 폴더가 생성되는데 비어 있는데 방금 실행하면 ./mkBackup
폴더가 생성되고 다 복사가 됩니다. 이런 작업은 처음이라 udev
간단한 질문처럼 보이더라도 양해해 주시기 바랍니다. 미리 감사드립니다.
답변1
백업 폴더가 생성되면 장치를 플러그인할 때 스크립트가 성공적으로 실행된다는 것을 알 수 있습니다. 스크립트가 실행되고 있는 것 같습니다.~ 전에장치가 실제로 마운트를 완료합니다. 따라서 해당 파일은 아직 cp
.
sleep 5
뒤에 추가하면 어떻게 되나요 mkdir $a
? 아니면 대신 기존 파일을 복사하려고 하면 어떻게 되나요?
이 링크참고자료로도 꽤 도움이 됩니다.
나는 또한 다음을 사용합니다:
udevadm monitor --udev
udev 이벤트를 실시간으로 시청합니다.
udevadm test /path/to/dev
장치에 대한 udev 이벤트 실행을 시뮬레이션합니다. 참고하세요.~ 아니다RUN 키로 지정된 프로그램을 실행합니다.
편집하다:Gilles가 유용하게 지적했듯이 내 아이디어는 작동하지 않습니다. 그리고 나는 해결책을 모른다. 이유는 다음과 같습니다.
Udev는 USB 장치를 OS에서 사용할 수 있도록 만듭니다. 그런 다음 OS는 OS에 마운트 가능한 파일 시스템이 포함되어 있음을 인식하고 이를 마운트합니다. 이 시점에서 USB 장치의 파일을 실제로 사용할 수 있습니다.
udev 규칙에 의해 실행되는 모든 스크립트가 실행됩니다.~ 전에파일 시스템이 실제로 마운트되었습니다. 대안이 생각나면 게시물을 업데이트하겠습니다.