我正在编写一个.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_2
Myfile_3
Myfile_1
Myfile_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'"