【问题标题】:Copy files using bash使用 bash 复制文件
【发布时间】:2015-03-31 22:16:31
【问题描述】:

我有两个工作目录,每个目录都由几个文件夹组成(这些文件夹的名称在两个目录之间是相同的)。

from=/home/cmoon/OR5P3_4nax
to=/home/cmoon/total_decomp

因为$from 中每个文件夹的名称对应于$to 中的那些文件夹,我需要使用以下方法将一些文件 (md.in) 从一个文件夹复制到另一个文件夹:

for sim in ${from}/OR5P3_* ; do
 if [[ -d $sim ]]; then
   title=$(basename "$sim")
   pushd $sim
   cp md.nc ${to}/${title}/md3.nc
   popd
 fi
done

这里我使用${title} 来确保md.nc 将从dir1 中的每个初始文件夹复制到dir2 中具有完全相同名称的文件夹:

e.g  /${from}/lala1 -> /${to}/lala1
e.g  /${from}/lala2 -> /${to}/lala2
e.g  /${from}/lala10 -> /${to}/lala10

这个脚本正确吗?

如何在脚本中添加一些打印消息以查看(我猜是使用 PWD)文件夹的确切位置。

【问题讨论】:

  • 使用cp -v 进行详细输出。

标签: bash


【解决方案1】:

如果目录${to}/${title} 不存在,则复制将失败。首先确保它存在:

mkdir -p "$to/$title"          # use `-p` to avoid error if it already exists
cp md.nc "$to/$title/md3.nc"

记得引用你的"$vars"——大括号不一样。

【讨论】:

    【解决方案2】:

    有@arco444 建议你可以cp -vcp 会输出from -> to

    否则你可以在循环中添加:

     echo "coping in folder: $to/$title"
    

    【讨论】:

      猜你喜欢
      • 2011-04-22
      • 2010-12-06
      • 2015-12-09
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2018-07-18
      • 2020-12-25
      • 2012-08-10
      相关资源
      最近更新 更多