파일 이름을 기반으로 하위 디렉터리를 만들고 일치하는 파일을 해당 디렉터리로 이동하는 스크립트를 만듭니다.

파일 이름을 기반으로 하위 디렉터리를 만들고 일치하는 파일을 해당 디렉터리로 이동하는 스크립트를 만듭니다.

폴더에는 많은 수의 파일이 있습니다. 각 파일 쌍은 이름은 같지만 확장자는 다릅니다(.obj 및 .mtl). 동일한 이름을 가진 각 파일 쌍에 대한 폴더를 만든 다음 각 파일 쌍을 일치하는 폴더로 이동하고 싶습니다. 파일 이름에는 항상 문자가 포함되며 일부에는 밑줄과 숫자도 포함됩니다.

내가 해야 할 일은:
A) 파일 이름 읽기
B) 이전 파일과 동일한 이름을 가진 하위 디렉터리 만들기
C) 파일 이름과 일치하는 파일 쌍을 일치하는 하위 디렉터리로 이동
D) 다음 파일에 대해 반복

예:
파일: Big_Column1.obj, Big_Column1.mtl은
하위 디렉터리: Big_Column1로 이동됩니다.

답변1

테스트를 거쳐 잘 작동함

이름은 같지만 확장자가 다른 모든 파일 이름과 별도의 파일 이름을 찾고 디렉터리를 구성 및 생성하고 파일을 같은 이름의 디렉터리로 이동합니다.

다음 예에서는 Big_Column1, Big_Column2 디렉터리가 생성됩니다.

for i in `ls -ltrh directorypath| awk '{print $NF}'| awk -F "." '{print $1}'| sort| uniq`; do mkdir $i; yes|cp  $i* $i; done

Before

praveen_linux_example pravee]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column1.obj
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.mtl
-rw-r--r--. 1 root root 0 Nov 30 22:38 Big_Column2.obj


command:n_linux_example pravee]# for i in `ls -ltrh | awk '{print $NF}'| awk -F "." '{print $1}'| sort| uniq`; do mkdir $i; yes|cp  $i* $i; done

뒤쪽에

After executing below is the output of ls -ltr

drwxr-xr-x. 2 root root 4096 Nov 30 22:39 Big_Column1
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column1.mtl
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column1.obj
drwxr-xr-x. 2 root root 4096 Nov 30 22:39 Big_Column2
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column2.mtl
-rw-r--r--. 1 root root    0 Nov 30 22:38 Big_Column2.obj

답변2

이 작업을 수행하기 위한 빠른 지침은 다음과 같습니다. 우리는 단순히 쉘 와일드카드를 사용하여 현재 디렉터리의 모든 파일을 반복하고(원하는 파일이라고 가정) 마침표 앞에 파일 이름으로 디렉터리를 생성하고 ( 디렉토리가 이미 존재하는 경우 오류 없음) cut로 이름을 수정합니다. mkdir -p거기로 파일을 이동하세요. 실제로는 아무것도 아닙니다.

for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done

관련 정보