우선, Linux에 대한 저의 지식은 매우 제한적이지만 항상 최선을 다합니다. 또한 Cronjob과 스크립트를 사용하여 Unraid Server와 RPi에서 많은 작업을 자동화했지만 지금은 조금 헤매고 있습니다.
다음 상황: icloud 사진 다운로더를 사용하여 icloud 저장소에 있는 모든 사진과 비디오를 로컬 NAS에 자동으로 다운로드하고 있습니다. 하위 폴더 구조 /yyyy/mm/을 사용하고 .jpg 및 .mov를 다운로드합니다. 예를 들어 오늘 촬영한 비디오는 오늘 밤 /2020/12/IMG_0123.mov에 다운로드됩니다.
또한 mkv는 내 모든 장치에서 재생되는 반면 .mov는 항상 Plex 등에서 변환되기를 원하기 때문에 "handbrake"를 사용하여 .mov를 .mkv로 변환합니다. Handbrake의 경우 감시 폴더(/videowatch/)와 출력 폴더(/videooutput/)를 관리했습니다. 이 폴더는 감시 폴더에 복사한 비디오 파일을 자동으로 변환하고 폴더 구조별로 동일한 파일을 다시 만들어 내보낼 때 사용합니다. 출력 폴더. 예: 위에서 언급한 비디오 파일을 하위 폴더 /videowatch/2020/12/IMG_0123.mov에 복사했습니다. 핸드브레이크는 이를 mkv로 트랜스코딩하고 파일을 /videooutput/2020/12/IMG_0123.mkv로 내보냅니다. 그러면 .mov가 삭제됩니다.
이 단계는 현재 수동으로 수행하고 있으며 자동화하고 싶습니다.
이 스크립트를 어떻게 관리할 수 있나요? 다음 단계를 수행해야 합니다.
- 모든 하위 폴더에서 .mov 유형의 파일 검색
- 발견된 모든 .mov 파일을 /videowatch/ 폴더로 이동하되 하위 폴더 구조를 다시 만듭니다.
예: icloudpd는 /2020/11/ 및 /2020/12/ 폴더에 두 개의 새로운 .mov(file1.mov 및 file2.mov)를 다운로드합니다. 이 두 폴더에는 이미 다른 많은 .jpg 및 .mkv 파일이 저장되어 있습니다.
- 스크립트는 두 개의 .mov 파일 /2020/11/file1.mov 및 /2020/12/file2.mov를 인식합니다.
- 스크립트는 이 두 파일을 /videowatch/ 폴더로 이동하고 하위 폴더 구조를 다시 만듭니다. 그런 다음 /videowatch/2020/11/file1.mov 및 /videowatch/2020/12/file2.mov를 갖게 됩니다.
그게 가능합니까? 마지막 단계로, videooutput 폴더의 내용을 /로 다시 이동하여 새 mkv 파일을 이전 .mov 파일의 대상 폴더로 이동해야 합니다. 핸드브레이크는 하위 폴더 구조를 유지하므로 crontab의 mv 항목을 통해 쉽게 처리할 수 있습니다.
너무 복잡하게 설명하지 않았으면 좋겠습니다.
당신의 도움을 주셔서 대단히 감사합니다!
.mov 파일을 감시 폴더(폴더 구조 포함)로 이동하는 스크립트를 작성하려고 합니다.
예를 들어 find를 사용하여 파일을 검색할 수 있습니다.
find . -name "*.MOV" -type f
이는 다음을 제공합니다:
./2008/08/CIMG0035.MOV
./2010/11/IMG_0212.MOV
그런 다음 이 두 파일을 감시 폴더로 이동하면 다음과 같이 표시됩니다.
./videowatch/2008/08/CIMG0035.MOV
./videowatch/2010/11/IMG_0212.MOV
다른 모든 것(handbrake, icloudpd, cronjob 등)을 직접 처리할 수 있었습니다.
나는 사용할 수 있다
find . -name "*.MOV" -type f -exec mv '{}' /watchfolder/ \;
그러면 find 명령으로 인식된 모든 .MOV가 감시 폴더 기본 폴더로 이동되지만 계층 구조와 하위 폴더는 없습니다. 따라서 해당 폴더에 있는 모든 파일을 연/월별로 나열하지는 않습니다.
./videowatch/CIMG0035.MOV
./videowatch/IMG_0212.MOV
하지만 그것은 내가 원하는 것이 아닙니다. 파일이 소스 폴더에 있기 때문에 연도/월 하위 폴더를 포함하기를 원하거나 필요합니다.
감사해요!
답변1
쉘 스크립트를 호출하고 이 문제에 대한 솔루션 중 하나를 사용할 수 있습니다.mv가 존재하지 않는 경우 이동할 디렉토리를 생성하도록 하는 방법이 있습니까?
rsync
/를 사용하여 원하는 것을 동기화한 다음 수동으로 삭제할 --include
수도 있습니다 .--exclude
또는 find
파일 목록을 생성하면 다른 모든 작업을 수행하는 스크립트에서 해당 목록을 읽을 수 있습니다(이제 이동도 수행함). 이런 경우에는 mkdir -p
움직이기 전에 하는 것이 효과적입니다.
이동하려는 파일이 완전히 다운로드될 수도 있고 다운로드되지 않을 수도 있다는 점에 유의하세요. 스크립트를 실행할 때 클라우드에서 전송되는지 여부를 알 수 있는 방법이 필요합니다. 이를 수행하는 방법은 다운로드를 수행한 도구에 따라 다릅니다. 숨겨진 파일이 있거나 fuser
이동하려는 파일에서 작업하여 찾을 수 있습니다. 그렇지 않으면 데이터가 손실될 위험이 있습니다.