Bash는 파일 이름을 기반으로 폴더를 만든 다음 파일을 폴더로 이동할 수 있습니까?

Bash는 파일 이름을 기반으로 폴더를 만든 다음 파일을 폴더로 이동할 수 있습니까?

/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파일 이름과 같은 부분을 효과적으로 제거하고 선행 디렉토리 지정자만 남깁니다.

관련 정보