【问题标题】:Bash Script to copy from external drive to Box folder从外部驱动器复制到 Box 文件夹的 Bash 脚本
【发布时间】:2021-06-11 21:50:00
【问题描述】:

尝试编写一个 bash 脚本以根据主题 ID 将大量文件从外部驱动器复制到单独的目录中。

我已经包含了我在下面编写的脚本。

我收到以下错误:

cat: /Volumes/Seagate: No such file or directory
cat: Backup: No such file or directory
cat: Plus: No such file or directory
cat: Drive/Subject_List.txt: No such file or directory

当我尝试使用终端一次复制一个文件时,它会使用我在此脚本中输入的确切命令进行复制。我不确定为什么当我尝试在下面的脚本中使用它时它无法识别目录。非常感谢任何帮助!

#!/bin/bash

#A bash script to copy the structural and functional files into the HCP_Entropy folder

#subject list

SUBJECT_LIST="/Volumes/Seagate/Backup/Plus/Drive/Subject_List.txt

for j in $(cat ${SUBJECT_LIST}); do 

echo ${j}

cp /Volumes/Seagate\ Backup\ Plus\ Drive/HCP_DATA/Structural/{j}/unprocessed/3T/T1w_MPR1/${j}_3T_T1w_MPR1.nii.gz /Users/myname/Box/HCP_Entropy/BEN/${j}/anat

done

【问题讨论】:

  • 每当你有参数,比如这些文件名,其中有空格,你需要在它们周围加上引号。现有答案指出,对于脚本的一部分,您报告的额外错误属于同一类型:在您使用变量的任何地方,确保它们在双引号内。

标签: bash scripting drive


【解决方案1】:

线

$SUBJECT_LIST=/Volumes/Seagate\ Backup\ Plus\ Drive/Subject_List.txt

是假的。

要为变量赋值,您不能添加$ 说明符。 以$ 开头的标记将扩展,因此$SUBJECT_LIST=... 将首先扩展为=...(因为您尚未为SUBJECT_LIST 变量分配任何内容,但它为空)。

正确的方法是:

SUBJECT_LIST="/Volumes/Seagate Backup Plus Drive/Subject_List.txt"

(这使用引号而不是转义每个空格,我发现这更具可读性)

如果变量包含空格,您还需要引用它们,否则它们可能会被命令 (cp) 解释为多个参数。

for j in $(cat "${SUBJECT_LIST}"); do
 # ...
done

当然,你应该检查源文件是否真的存在,就像目标目录一样。

indir="/Volumes/Seagate Backup Plus Drive"
SUBJECT_LIST="${indir}/Subject_List.txt"
cat "${SUBJECT_LIST}" | while read j; do
  infile="${indir}/HCP_DATA/Structural/${j}/unprocessed/3T/T1w_MPR1/${j}_3T_T1w_MPR1.nii.gz"
  outdir="/Users/myname/Box/HCP_Entropy/BEN/${j}/anat"

  mkdir -p "${outdir}"
  if [ -e "${infile}" ]; then
    cp -v "${infile}" "${outdir}"
  else
   echo "missing file ${infile}" 1>&2
  fi
done

【讨论】:

  • 感谢您的帮助。我做了以下更改,现在我得到一个不同的错误:cat:/Volumes/Seagate:没有这样的文件或目录 cat:备份:没有这样的文件或目录 cat:加:没有这样的文件或目录 cat:Drive/Subject_List。 txt:没有这样的文件或目录。有什么见解吗?
  • 我已经更新了答案。 (我真的希望这不是一个曲折的问题,只要三个是新答案,就添加一个“但现在它做到了”)
猜你喜欢
  • 1970-01-01
  • 2023-01-24
  • 2021-08-15
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
相关资源
最近更新 更多