데몬 모드에서 inotifywait 출력 편집

데몬 모드에서 inotifywait 출력 편집

저는 진전을 이루고 있지만 여기서부터 어떻게 계속해야 할지 모르겠습니다. inotifywait( 데몬) 스위치를 사용하여 -dwatch 폴더에 넣은 비디오 파일을 나열하는 파일을 출력합니다.

볼륨 레벨을 조정하고 다시 인코딩하는 데 시간이 많이 걸리고 어떤 이벤트도 놓치고 싶지 않기 때문에 이 목록이 필요합니다. 제 질문은 실제로 데이터를 zsh스크립트에서 사용할 수 있는 것으로 조작하는 방법입니다. 각 줄에 다음 형식을 사용하세요.

/path/to/file containing/white spaces/ CLOSE_WRITE,CLOSE file name with white spaces

나에게 필요한 것은

/path/to/file\ containing/white\ spaces/filename\ with\ white\ spaces.extension

경로가 변경되고 하위 폴더 수준 수가 변경되며 파일 이름이 변경됩니다. 일관적입니다 ** CLOSE_WRITE,CLOSE **(앞에 한 칸, 뒤에 한 칸). 누군가 스크립트에서 이 줄 부분을 제거하는 방법에 대해 나에게 기꺼이 교육해 준다면 zsh(실제로는) 나머지 부분을 추가할 수 있을 만큼 충분히 알고 있다고 생각합니다. 백슬래시 막대를 사용하여 공백을 추가하고 Vim더 이상 명령줄과 내가 본 코드 조각을 사용할 필요가 없으면 해당 줄을 제거하십시오.

나는 이미 필요한 대부분을 가지고 있습니다. 사실 몇 시간 동안 자동으로 파일을 변환하는 스크립트를 작성했습니다.또는볼륨 레벨을 조정하려면 이 파일을 모두 하나로 묶어야 합니다(시작 시 변환되지 않은 파일을 확인할 계획도 있습니다. 원자 파일/폴더 잠금을 생성하는 방법도 알아내고, 새 tmux 세션을 생성하여 로그할 수 있습니다). 하지만 컴퓨터는 계속 실행 상태로 둡니다. 적어도 데스크탑을 고치고 병렬 처리 방법을 배울 때까지는 가능합니다. 하지만 그런 일은 나중에 모두 일어날 것입니다.

모든 도움에 크게 감사드립니다.

답변1

--format이 옵션을 사용할 수 있습니다inotifywait출력 형식을 변경합니다. 파일이 닫힐 때만 파일 이름이 인쇄되고 이벤트 유형은 인쇄되지 않습니다.

inotifywait -eclose_write -m --format "%w%f" -q /path/to/target/dir

C 스타일 이스케이프( )를 지원하지 않는 것 같 \0으며 각 이벤트 끝에 줄바꿈을 인쇄해야 한다고 주장하므로 파일 이름에 줄바꿈이 포함되지 않기를 바랍니다.

답변2

에서 man parallel:

예: 디렉터리 처리기로서의 GNU Parallel

사용자가 처리가 필요한 파일을 넣을 수 있는 디렉터리가 있는 경우 GNU/Linux에서 이 작업을 수행할 수 있습니다(다른 플랫폼에서 inotifywait를 호출하는 것을 알고 있는 경우 버그 보고서를 제출하세요).

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
      parallel -u echo

그러면 my_dir 또는 my_dir의 하위 디렉터리에 있는 모든 파일에 대해 echo 명령이 실행됩니다.

물론 -S를 사용하여 원격 시스템에 작업을 배포할 수 있습니다.

inotifywait -qmre MOVED_TO -e CLOSE_WRITE --format %w%f my_dir |\
      parallel -S ..  -u echo

이것은 당신이 하고 싶은 일에 매우 가까운 것 같습니다.

GNU 병렬을 배우려면 "man parallel"로 시작하는 "독자 안내서"를 따르십시오.

관련 정보