특정 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
백업 폴더가 생성되는데 비어 있는데 실행하면 ./mkBackup
폴더가 생성되고 내용이 모두 복사됩니다. 이런 일은 처음이라 udev
간단한 질문처럼 보이더라도 양해해 주시기 바랍니다. 미리 감사드립니다.
답변1
백업 폴더가 생성되었으므로 장치를 연결하면 스크립트가 성공적으로 실행된다는 것을 알 수 있습니다. 스크립트가 실행 중인 것 같습니다.앞으로장비가 실제로 설치되었습니다. 따라서 이러한 파일은 아직 cp
.
sleep 5
나중에 추가하면 어떻게 되나요 mkdir $a
? 아니면 기존 파일을 복사하려고 하면 어떻게 되나요?
이 링크참고자료로도 도움이 됩니다.
나는 또한 다음을 사용합니다:
udevadm monitor --udev
udev 이벤트를 실시간으로 시청하세요.
udevadm test /path/to/dev
장치에 대해 실행 중인 udev 이벤트를 시뮬레이션합니다. 이렇게 되니 참고하세요아니요RUN 키로 지정된 프로그램을 실행합니다.
편집하다:Giles가 유용하게 지적했듯이 내 아이디어는 작동하지 않습니다. 그리고 나는 해결책을 모른다. 이유는 다음과 같습니다.
Udev는 USB 장치를 운영 체제에서 사용할 수 있도록 만듭니다. 그러면 운영 체제는 운영 체제에 마운트 가능한 파일 시스템이 포함되어 있음을 인식하고 이를 마운트합니다. 이 시점에서 USB 장치의 파일을 실제로 사용할 수 있습니다.
udev 규칙에 의해 실행되는 모든 스크립트가 실행됩니다.앞으로파일 시스템이 실제로 마운트되었습니다. 대안이 생각나면 게시물을 업데이트하겠습니다.