微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从外部驱动器复制到 Box 文件夹的 Bash 脚本

如何解决从外部驱动器复制到 Box 文件夹的 Bash 脚本

尝试编写一个 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

解决方法

线

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

是假的。

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

正确的方法是:

SUBJECT_LIST

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

如果变量包含空格,您还需要引用它们,否则它们可能会被命令 (SUBJECT_LIST="/Volumes/Seagate Backup Plus Drive/Subject_List.txt" ) 解释为多个参数。

cp

当然,您应该检查源文件是否确实存在,就像目标目录一样。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。