linux 下用 shell 给文件夹内的文件归类

来源:互联网 发布:淘宝店名测试打分 编辑:程序博客网 时间:2024/05/21 22:49

如下图所示,现在需要将几百个文件夹(此处只列出两个举例子)内的图片按命名规范重新分类,用 bash shell 处理这个问题就比较方便。
这里写图片描述

#!/bin/bashProjPath=`cd $(dirname "$0");pwd`dirPath="$ProjPath/cultivar_process"#自定义分类文件夹名FileName=$1mkdir $FileName"_t"mkdir $FileName"_t_b"mkdir $FileNamemkdir $FileName"_b"t_filePath="$ProjPath/$FileName"_t""t_b_filePath="$ProjPath/$FileName"_t_b""filePath="$ProjPath/$FileName"b_filePath="$ProjPath/$FileName"_b""#所有存放叶子的文件夹dirList=`ls $dirPath`#遍历存有叶片的文件夹for DirName in $dirListdo    cd $dirPath/$DirName    file_1_1_t_list=`ls *_[1-3]_[1-3]_t.tif`    for file_1_1 in $file_1_1_t_list    do        cd $t_filePath        if [ ! -d "$DirName" ]        then            mkdir $DirName        fi        cp $dirPath/$DirName/$file_1_1 $t_filePath/$DirName     done    cd $dirPath/$DirName    file_1_1_t_b_list=`ls *_[1-3]_[1-3]_t_b.tif`    for file_2_2 in $file_1_1_t_b_list    do        cd $t_b_filePath        if [ ! -d "$DirName" ]        then            mkdir $DirName        fi        cp $dirPath/$DirName/$file_2_2 $t_b_filePath/$DirName    done    cd $dirPath/$DirName    file_1_1_list=`ls *_[1-3]_[1-3].tif`    for file_3_3 in $file_1_1_list    do        cd $filePath        if [ ! -d "$DirName" ]        then            mkdir $DirName        fi        cp $dirPath/$DirName/$file_3_3 $filePath/$DirName    done    cd $dirPath/$DirName    file_1_1_b_list=`ls *_[1-3]_[1-3]_b.tif`    for file_4_4 in $file_1_1_b_list    do        cd $b_filePath        if [ ! -d "$DirName" ]        then            mkdir $DirName        fi        cp $dirPath/$DirName/$file_4_4 $b_filePath/$DirName    donedone

这样便实现了对文件夹下图片的不同命名规则的分类。选取以上程序的部分片段进行分析如下:

ProjPath=`cd $(dirname "$0");pwd`

表示当前脚本的相对路径,这样写便于程序的移植与通用,避免路径写死。

FileName=$1

$1表示脚本接受的参数(第一个参数),$0表示当前文件。

dirList=`ls $dirPath`

此处表示列举出指定目录下的所有文件。

file_1_1_t_list=`ls *_[1-3]_[1-3]_t.tif`

此处表示列举出指定文件名格式的文件(用正则表示)。

if [ ! -d "$DirName" ]then    mkdir $DirNamefi

此处判断是否存在指定文件夹,若不存在,则创建。

2 0
原创粉丝点击