쉘 스크립트의 이름을 기준으로 폴더의 파일 구성

쉘 스크립트의 이름을 기준으로 폴더의 파일 구성

파일을 작성 중이며 .sh.sh의 상위 폴더에서 실행하고 수백 개의 파일이 포함된 /parent_folder/하위 폴더를 생성하는 명령을 실행합니다 . 각 파일은 해당 파일로 시작하고 숫자, 다른 숫자, 그 다음에는 다른 많은 문자가 있습니다. 더 작은 예로 다음과 같은 파일 이름이 있습니다.My_Sub_FolderMyfile__

Myfile_1_1_3423423_MY.my
Myfile_1_2_3242343_MY.my
Myfile_1_3_5645654_MY.my
Myfile_2_1_3242354_MY.my
Myfile_2_2_4534535_MY.my
Myfile_2_3_2365464_MY.my
Myfile_3_1_5464567_MY.my
Myfile_3_2_4364766_MY.my
Myfile_3_3_4564564_MY.my

그림에 표시된 것처럼 모든 파일은 Myfile_숫자 증가 개수로 시작하고 _또 다른 개수 증가 숫자로 시작하므로 제가 하고 싶은 작업은 내부에 하위 폴더를 만드는 것 입니다. 아래 위 예에서는 모든 파일이 저장될 My_sub_folder이름이 지정된 세 개의 하위 폴더가 있습니다. Myfile_1등으로 시작하세요. 이를 수행하는 방법에 대한 제안이 있습니까?Myfile_2Myfile_3Myfile_1Myfile_1_*

이것은 내 스크립트입니다.

#!/bin/sh
myscript2.sh
DIR=$(pwd)
${DIR}/My_sub_folder
###I am not sure how I can then loop on the files and create the needed folders depending on their names as explained above then move them to the corresponding folder

답변1

이런 것들,

#!/bin/sh
#
for file in My_Sub_Folder/*.my    # Files end with ".my" suffix
do
    dir="${file%_*_*_*.my}"       # Strip the pattern off the end of the filename
    mkdir -p "$dir"               # Create the directory unless it already exists
    mv "$file" "$dir/"            # Move the file to the directory
done

그런 다음 파일을 실행 가능하게 만들 수 있습니다(이 경우에는 이라고 합니다 thescript).

chmod a+x thescript

그런 다음 필요한 만큼 여러 번 실행하세요.

./thescript

무슨 일이 일어나고 있는지 보려면 로 시작하는 추가 줄을 삽입하세요 echo. 예를 들어,

echo "Creating directory: mkdir '$dir'"

관련 정보