파일 이름의 처음 6자리가 포함된 디렉터리로 파일을 이동합니다.

파일 이름의 처음 6자리가 포함된 디렉터리로 파일을 이동합니다.

QNAP nas의 단일 디렉토리에 수천 개의 원본 사진( .nef)과 관련 설정(동일한 파일 이름, 동일한 확장자)이 있습니다. 내 목표는 자동으로 또는 else라는 하위 디렉터리를 .xmp만들고 그에 따라 모든 파일을 거기로 이동하는 것입니다. 모든 파일 이름은 밀리초와 비슷 하거나 그 이내 입니다 . yyyy-mmyyyy/mm
yyyy-mm-dd_hhmmss-###.nefyyyy-mm-dd_hhmmss-###.xmp###

답변1

이러한 파일 이름의 연도를 알고 있다면 무차별 대입 공격을 가할 수 있습니다.

for year in {1996..2018}; do
    for month in {01..12}; do
        mkdir -p ${year}-${month}
        for filetype in nef xmp; do
            mv ${year}-${month}*.${filetype} ${year}-${month}/
        done
    done
done

답변2

다음은 표준 QNAP에서 사용할 수 있는 제한된 명령 세트가 포함된 루프 기반 솔루션입니다.

#!/bin/bash
for file in ????-??-??_*.{nef,xmp}
do
    yyyymm=${file/-??_*}
    echo mkdir -p "$yyyymm"
    echo mv -f "$file" "$yyyymm/"
done

예를 들어 파일에 넣으십시오. /root/fixup파일이 많은 디렉토리로 변경하고 를 실행하십시오 bash /root/fixup. yyyy-mm처리 중인 파일 이름을 기반으로 요청 시 디렉터리를 생성 합니다 .

쓰여진 대로 아무것도 바뀌지 않습니다.제대로 작동할 것 같다고 만족하면 echo스크립트 끝 부분에 있는 두 줄에서 해당 단어를 제거하세요.

답변3

특정 패턴에 따라 디렉토리를 일괄 생성하려는 경우 다음을 사용할 수 있습니다.

mkdir -p ~/{0001,0002,0003,...,XXXX}/{01,02,03,...,XX}

변수를 실제로 사용하려는 값으로 바꾸십시오. 따라서 연도, 월, 일 디렉터리를 만드는 예는 다음과 같습니다.

mkdir -p ~/{1998..2018}/{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec}/{01..31}

그런 다음 31일이 없는 달을 검색하고 아래 설명에 따라 제거할 수 있습니다.이 게시물. 그 후, 당신의 임무는 사진을 올바른 디렉토리로 정렬하는 것입니다. 이는 찾기 및 삭제와 매우 유사하며 다음에 설명되어 있습니다.이 게시물.

이렇게 하면 현재 작업 디렉터리 내에 하위 디렉터리가 생성됩니다. DopeGhoti 사용자가 언급했듯이 for 루프를 만들어 각 단계를 한 번에 완료할 수 있습니다. 행운을 빌어요!

관련 정보