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

Bash 使用通配符复制文件夹和文件,bash,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_

我有一个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
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
现在,它备份了两个文件夹,
Syscan\u docketport 465
DocuCap\u docketport 467
。这些文件夹中有一个名为
Calibration.dat
的文件

我现在需要做的是,使
*\u DocketPORT*
之后的每个文件夹都能够备份和恢复,这样每次添加DocketPORT的新配置时,我们就不需要编辑脚本

我试过这个:

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
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\u docketport 465/Calibrate.dat

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


有人能帮我吗?

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

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

你这个男人。我不敢相信我自己没有看到:)我想有时候你只需要一双眼睛。