메뉴 닫기

Synology/Xpenology 파일 자동으로 분류하는 방법

개요

Synology/Xpenology에서 특정한 규칙에 따라 파일을 자동으로 분류하여 원하는 폴더로 이동시키는 방법입니다. Download Station에서 파일을 다운로드 받은 이후에 파일에 따라 지정된 폴더로 이동시키고 싶을 때 등 여러 방면으로 활용할 수 있습니다.

 

파일 이름, 확장자 등 특정 조건에 해당하는 파일을 원하는 폴더로 이동

작업 스케줄러 설정

제어판 > 작업 스케줄러 > 생성 > 예약된 작업 > 사용자 정의 스크립트를 선택합니다.

 

일반 탭에서 아래와 같이 입력합니다.

  • 작업 : Move file(원하는 작업명)
  • 사용자 : root(다른 사용자를 선택하셔도 됩니다)
  • 활성화됨 체크 상태 유지

 

스케줄 탭을 아래와 같이 설정합니다.

  • 다음 일수 후 실행 : 매일
  • 첫 실행 시간 : 08:00(원하는 시간을 선택하시면 됩니다. 저는 서버가 8시에 켜지고 24시에 꺼지게 설정돼 있어서 이렇게 설정했습니다.)
  • 주기 : 매 5 분마다(원하는 주기 선택)
  • 마지막 실행 시간 : 23:55

 

특정 확장자의 파일을 디렉토리로 이동

작업 설정 탭에 아래와 같이 입력합니다. 사용자 정의 스크립트란에 아래 코드를 입력합니다. 아래 코드는 /volume1/downloads/ 디렉토리에 있는 모든 MP3 파일을 /volume1/music/iTunes/iTunes Media/iTunes에 자동 추가/라는 디렉토리로 이동시킨다는 의미입니다.

find /volume2/downloads/ -name "*.mp3" -type f -exec mv {} "/volume2/music/iTunes/iTunes Media/iTunes에 자동으로 추가/" \;

경로에 한글이 포함되어 있거나 띄어쓰기가 있다면 경로를 “”로 묶어 주시기 바랍니다.

 

특정 키워드가 포함된 동영상을 디렉토리로 이동

아래 코드는 /volume1/downloads/ 디렉토리에 있는 파일 중, 무한도전이라는 이름이 포함된 동영상 파일을 /volume1/video/tv/무한도전/이라는 디렉토리로 이동합니다. 동영상 포맷이 더 있다면 코드에 추가해주면 됩니다.

find /volume1/downloads/ -type f -regex '.*무한도전.*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\)' -exec mv {} "/volume1/video/tv/무한도전/" \;

만약 다운로드 받은지 날짜가 좀 지난 파일만 옮기고 싶다면 -mtime 옵션을 사용하면 됩니다. 아래 -mtime +5는 6일 전에 생성된 파일을 의미합니다.

find /volume1/downloads/ -type f -mtime +5 -regex '.*무한도전.*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\)' -exec mv {} "/volume1/video/tv/무한도전/" \;

find 명령 사용법은 이 글을 참고하세요.

 

파일 이름에 특정 디렉토리 이름이 포함된 경우 해당 디렉토리로 파일을 이동

예를 들어 MBC 무한도전 20170622.mp4라는 파일이 있고 무한도전 영상만 모아놓은 무한도전이라는 디렉토리가 있는 경우 파일 이름에 무한도전이 포함되어 있으면 무한도전 디렉토리로 파일을 이동하는 스크립트입니다.

제가 작성한 것은 아니고 클리앙의 TRPE님께서 작성한 것을 가져 왔습니다. 저도 아직 테스트를 해보지는 않았고 일단 스크랩의 개념으로 적어 둡니다.

TRG_PATH=/volume1/VIDEO/TV ##이동할 디렉토리를 입력합니다.
ORI_PATH=/volume1/Download ##다운로드 받은 디렉토리를 입력합니다.

for X in $(ls $TRG_PATH | grep -v "(" | grep -v "@" | sed 's/ /_/g') ##grep –v 다음에 제외할 디렉토리를 입력합니다.
do
FILENAME=$(echo $X | awk -F_ '{
i=2;
fn=$1;
while(i<=NF)
{
fn=sprintf("%s*%s",fn, $i);
i++;
}
print fn;
}')
if [ -f ${ORI_PATH}/*${FILENAME}*.* ] && [ -d ${TRG_PATH}/*${FILENAME}*/ ]
then
mv ${ORI_PATH}/*${FILENAME}*.* ${TRG_PATH}/*${FILENAME}*/
fi
done

 

참고

2 Comments

  1. 익명

    본문 코드를 복붙해도 작동이 안되길래 찾아보니 find 뒤의 경로에 큰따옴표를 추가하니 잘 작동하네요.

    예시) find /volume2/downloads/ -> find “/volume2/downloads/”

댓글 남기기