linux shell脚本批量创建文件软链接

发布时间:2021-01-05编辑:脚本学堂
本文介绍了linux中用shell脚本批量创建文件软链接的方法,shell脚本能够过滤出需要创建软链接的文件,并通过 ln 命令在目标目录中批量创建软链接文件。

linux shell批量创建文件软链接

linux下用shell脚本来批量创建文件的软链接。

要批量创建文件的软链接,自然要想想下我的shell脚本应该是能够提供什么样功能的(需求):由于初期没有什么特别要求,只要批量创建软链接即可,但创建软链接是使用 ln -s target_file link_file 的格式来的。
1. shell脚本要可以接收到这两个关键因素!
2.如果仅仅是接受这两个参数,就没有批量创建软链接一说了,因此,还应该有个文件过滤器,能够将需要批量创建的文件筛选出来。

需求明确成:shell脚本能够过滤出需要创建软链接的文件,并通过 ln 命令在目标目录中批量创建软链接文件。

文件BatchLinkFilesCreater.sh:
 

复制代码 代码示例:

#!/bin/sh
########################
## ARGUMENTS:
## TARGET_DIR: the directory where the link file to link.
## FILES_FILTER: this is the arguments of the ls command.
## LINK_DIR: where is the link file to save.
########################
function usagehelp()
{
  echo -e "Usage:batchCreateLink.sh -t TARGET_DIR -f FILES-FILTER -l LINK-DIRnn
    TARGET_DIR: the directory where the link file to linknn
    FILES_FILTER: arguments of ls command, to filter the list files.nn
    LINK_DIR: where is the link file to save.nnn
    sample:./batchCreateLink.sh -t "/usr/local/bin/" -f "*" -l "/tmp/"n
    any problems please contact MitchellChu, http://blog.useasp.net/"
}

if [ $# != 6 ]
then
  usagehelp
  exit 1
fi

echo "======================================="
echo "Multiple link files Creater"
echo -e "version:0.0.0.1n"
echo "ARGUMENTS:"

while getopts "t:f:l:" arg
do
  case $arg in
    t)
      echo "->TARGET_DIR:$OPTARG"
      TARGET_DIR=`dirname $OPTARG"/*"`;;
    f)
      echo "->FILES_FILTER:$OPTARG"
      FILES_FILTER=$OPTARG
      ;;
    l)
      echo "->LINK_DIR:$OPTARG"
      LINK_DIR=`dirname $OPTARG"/*"`;;
    ?)
      usagehelp
      exit 1;;
  esac
done

echo "======================================="

cd $TARGET_DIR
if [ `pwd` != $TARGET_DIR ]
then
  echo "$TARGET_DIR is not exist."
  exit 1
fi

cd $LINK_DIR
if [ `pwd` != $LINK_DIR ]
then
  echo "LINK DIR:$LINK_DIR is not exist."
  exit 1
fi

cd $TARGET_DIR
echo -e "n"
for FILENAME in $FILES_FILTER
do
  if [ $FILENAME ]
  then
    echo -e $LINK_DIR"/"$FILENAME" ----> "$TARGET_DIR"/"$FILENAME
    ln -s $TARGET_DIR"/"$FILENAME $LINK_DIR"/"$FILENAME
  fi
done
echo -e "nn[DONE]"

根据用户输入的目标文件夹,连接存放的文件夹和文件过滤参数,自动完成在目标文件夹中根据文件过滤规则过滤出需要创建软链接的文件,然后在需要软链接的存放文件夹内创建每一个文件的软链接,链接文件的目标自然是对应的目标文件夹内的文件。

为了能够更健壮点,添加了一些校验脚本,上面的脚本可保存到任意目录下,同时赋予可执行权限:
chmod +x BatchLinkFilesCreater.sh
## 如果仅仅是自己使用,则可以
chmod u+x BatchLinkFilesCreater.sh
在有执行权限后,你就可以根据你的需要调用这个shell脚本来批量创建文件的软链接了。

BatchLinkFilesCreater.sh脚本的参数说明:
-t TARGET_DIR,目标文件夹,就是要创建软连接的目标文件所在文件夹
-f FILES_FILTER,此参数是-t指定的文件夹内的文件过滤参数,根据此参数指定的过滤规则筛选出要创建软链接的文件。
-l LINK_DIR,被创建的软链接存放的文件夹。

文件功能:在LINK_DIR内创建TARGET_DIR内用FILES_FILTER筛选出来的文件的软连接。
如:
 

## 在/tmp目录下创建/tmp下所有以[.log]结尾的文件的软连接。
## 必要的时候你可能需要sudo来获得权限
./BatchLinkFilesCreater.sh -t "/tmp/" -f "*.log" -l "/tmp/"
 

 当然,这是测试,要删除测试文件,请使用find命令

## 删除上面代码创建在/tmp目录下的以.log结尾的软链接.
 

find /tmp/ -maxdepth 1 -type l -name "*.log" -exec rm -f {} ;

有了这个shell脚本,批量创建软链接是完全没有问题的。

可以将脚本改成任何其他需要批量处理的脚本代码——TIPs:仅需要很少的修改。
包括但不限于:
批量文件备份
批量文件改名