シェルスクリプトの名前に基づいてフォルダ内のファイルを構成する

シェルスクリプトの名前に基づいてフォルダ内のファイルを構成する

ファイルを作成していて、.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_folder3つのサブフォルダがあります。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'"

おすすめ記事