bash 스크립트가 udev를 사용하여 파일을 복사하지 않습니다.

bash 스크립트가 udev를 사용하여 파일을 복사하지 않습니다.

특정 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

으로 실행하면 udevBackup 폴더가 생성되는데 비어 있는데 방금 실행하면 ./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 규칙에 의해 실행되는 모든 스크립트가 실행됩니다.~ 전에파일 시스템이 실제로 마운트되었습니다. 대안이 생각나면 게시물을 업데이트하겠습니다.

관련 정보