패턴별로 정렬된 파일

패턴별로 정렬된 파일

저는 _로 구분된 다중 열 형식의 고정된 이름 구조를 사용하여 대량의 패딩 관리를 다루고 있습니다.

3000_12_lig_cne_158.dlg
1300_10_lig_cne_983.dlg
4000_09_lig_cne_158.dlg
5000_09_lig_cne_158.dlg
7000_09_lig_cne_158.dlg
10V1_06_lig_cne_983.dlg
10V2_11_lig_cne_158.dlg
N000_12_lig_cne_158.dlg
M000_10_lig_cne_158.dlg
E000_10_lig_cne_158.dlg

따라서 첫 번째 열에는 4개의 숫자(예: 7000) 또는 숫자와 문자의 조합(예: N000 또는 10V1)이 포함될 수 있습니다.

일부 bash 루틴을 사용하여 첫 번째 열 이름을 기준으로 이러한 채우기를 모두 정렬하고 첫 번째 열 이름과 일치하는 각 트랙에 대한 하위 디렉터리를 만들어야 합니다. 따라서 데모의 채워진 목록에는 총 10개의 디렉터리(3000, 1300, E000, M000, 10V1, 10V2 등)가 생성되어야 합니다.

첫 번째 열에 숫자만 있는 채우기의 경우 FOR 루프에서 정규식을 사용하여 채우기를 정렬하는 다음 경로를 사용할 수 있습니다.

for i in ${FILES}/[0-9]*_*.dlg        # match the filles containing only digits in the first column
do 
    j=${i##*/}               # strip the path off from beginning to last /
    mkdir -p $OUTPUT/${j%%_*}        # create dir with the name matching the first column of the file
    mv $i $OUTPUT/${j%%_*} # move the file to the corresponded directory
done

첫 번째 열의 모든 데모 패턴과 일치하도록 수정하려면 어떻게 해야 합니까?

답변1

사용하십시오 ( 매개변수 확장을 인용하지 않았기 때문에 zsh스크립트가 이미 zsh구문 에 포함되어 있습니다).bash

autoload zmv # best in ~/.zshrc

zmodload zsh/files # makes mkdir and mv (and a few other file manipulation
                   # utilities) builtin to speed things up.

mkmv() { mkdir -p -- $2:h && mv -- "$@"; }

(
  cd -P -- "$FILES" &&
    zmv -P mkmv '([A-Z0-9](#c4))_*.dlg' '$1/$f'
)

[A-Z0-9](#c4)4개의 영어 대문자와 일치합니다. ( , 에서만 일치 zsh하고 , Ŕ, Æ아님

답변2

4개의 문자만 필요한 경우 ?단일 문자를 4번 사용하십시오.

for dlg in "$FILES"/????_*.dlg 

관련 정보