Bash : 이름에 따라 파일 정렬
Sep 30 2020
많은 * .dlg 텍스트 파일로 채워진 workdir이 있습니다. 각 파일의 이름은 다음 형식으로 제공됩니다.
7000_01_lig_cne_1000.dlg
1300_01_lig_cne_1000.dlg
5000_01_lig_cne_1000.dlg
6000_01_lig_cne_1000.dlg
이러한 채우기를 첫 번째 인덱스 (첫 번째 _ 앞의 이름 시작 부분에서 발생) : 1300, 7000, 5000 또는 6000으로 정렬하기 위해 bash 워크 플로를 작성하고 각 인덱스에 대해 별도의 디렉터리를 만들어야합니다. 그런 다음 복사하십시오. 이 예에서는 4 개의 다른 디렉토리 (7000, 1300, 5000 및 6000)가 하나의 파일에 있어야합니다. 하지만 그런 다음 첫 번째 _ 이후 이름이 다른 거대한 채우기에 대한 스크립트를 적용해야합니다.
다음과 같을 수 있습니다.
#!/bin/bash
#set the name of folder with folles to be sorted
FILES=$PWD/test # where output directories should be created OUTPUT=$PWD
for i in ${FILES}/[0-9]*_*.dlg do mkdir -p ${OUTPUT}/${i%%_*} cp $i ${OUTPUT}/${i%%_*}
done
답변
2 JamesBrown Sep 30 2020 at 17:15
다음은 현재 작업 디렉토리에서 파일을 복사하고 동일한 위치에 새 디렉토리를 만드는 것입니다.
for i in [0-9]*_*.dlg # define this better to suit your needs
do
mkdir -p ${i%%_*} # remove substring starting from the 1st _ cp $i ${i%%_*}
done
파일이 별도의 디렉토리에있는 경우 :
for i in dir/[0-9]*_*dlg # they are in dir or path
do
j=${i##*/} # strip the path off from beginning to last /
mkdir -p ${j%%_*} # strip off from the first _ to the end cp $i ${j%%_*}
done
현재 작업 디렉토리로 이동합니다.
필요한 경우 변수를 따옴표로 묶습니다.