根据 shell 脚本中的名称组织文件夹中的文件

根据 shell 脚本中的名称组织文件夹中的文件

我正在编写一个.sh文件,我在 .sh 的父文件夹中运行它,/parent_folder/我运行一个命令,该命令创建了一个名为 的子文件夹My_Sub_Folder,其中有数百个文件,每个文件以该文件开头,Myfile_然后是一个数字,然后_是另一个数字,然后是许多其他字母,作为一个较小的示例,这些是一些文件名:

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'"

相关内容