使用通配符复制文件夹和文件

时间:2013-07-15 07:46:16

标签: bash

我有一个shell脚本,用于备份和恢复扫描仪设备的校准。

代码:

if [ "-backup" == "$1" ]; then
  if [ ! -d $BACKUPDIR ]; then
    mkdir -p $BACKUPDIR
    cp -r -d $HOME/Syscan_DocketPORT465 $BACKUPDIR/Syscan_DocketPORT465
    cp -r -d $HOME/DocuCap_DocketPORT467 $BACKUPDIR/DocuCap_DocketPORT467
  fi
elif [ "-restore" == "$1" ]; then
  if [ -d $BACKUPDIR ]; then
    cp $BACKUPDIR/Syscan_DocketPORT465/* $HOME/Syscan_DocketPORT465/
    cp $BACKUPDIR/DocuCap_DocketPORT467/* $HOME/DocuCap_DocketPORT467/
  fi
fi

现在,它备份了2个文件夹Syscan_DocketPORT465DocuCap_DocketPORT467。在这些文件夹中有一个名为Calibration.dat的文件。

我现在需要做的是,使*_DocketPORT*后面的每个文件夹都备份和恢复,以便每次添加DocketPORT的新配置时,我们都不需要编辑脚本。

我试过这个:

if [ "-backup" == "$1" ]; then
  if [ ! -d $BACKUPDIR ]; then
    mkdir -p $BACKUPDIR
    cp -r -d $HOME/*_DocketPORT* $BACKUPDIR
  fi
elif [ "-restore" == "$1" ]; then
  if [ -d $BACKUPDIR ]; then
    cp -r -d $BACKUPDIR/*_DocketPORT/* $HOME
  fi
fi

对于备份,这很好用!

但是对于恢复,它一直告诉我它不能用/home/path/Calibrate.dat覆盖之前创建的/home/path/Syscan_DocketPORT465/Calibration.dat

基本上,由于某种原因,它一直将Calibration.dat放在/home/path/而不是/home/path/SOMEDOCUCAPFOLDER/

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您的第二个cp命令在*_DocketPORT/*中的斜杠不正确。它应该是*_DocketPORT*。尝试将其更改为:

cp -r -d $BACKUPDIR/*_DocketPORT* $HOME