/Desktop/a/에는 다음과 같은 파일 세트가 있습니다.
DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
DSCN1841.AVI00001.png
내가 원하는 것은 다음과 같은 구조를 갖는 것입니다.
Desktop/a/DSCN1840/
DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
Desktop/a/DSCN1841/
DSCN1841.AVI00001.png
답변1
일회성 단계로 모든 파일을 반복하여 필요한 하위 디렉터리 이름을 수집할 수 있습니다. 하위 디렉터리가 아직 없으면 해당 하위 디렉터리로 파일을 이동합니다.
for f in *.png
do
subdir=${f%%.*}
[ ! -d "$subdir" ] && mkdir -- "$subdir"
mv -- "$f" "$subdir"
done
이것의 핵심 부분은 의 인수 확장입니다 ${f%%.*}
. 즉, %%
가장 긴 일치 부분을 제거하고 마침표( )를 사용하여 .AVI00003.png
파일 이름과 같은 부분을 효과적으로 제거하고 선행 디렉토리 지정자만 남깁니다.