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