【发布时间】:2019-01-06 01:30:39
【问题描述】:
我正在尝试编写一个 shell 脚本,以便我可以根据输入将学校文件从一个目的地移动到另一个目的地。我从画布之类的源下载这些文件,并希望根据我分配的标签将它们从我的下载中移动到我的课程文件夹的路径中,这要归功于我如何保持井井有条。不幸的是,由于我将这些文件存储在我的 OneDrive 学校帐户中,我无法消除一些间距问题,但我相信我已经解决了这些问题。现在脚本如下:
if [ "$1" = "311" ];
then
course="'/path/to/311/folder/$2'"
elif [ "$1" = "411" ];
then
course="'/path/to/411/folder/$2'"
elif [ "$1" = "516" ];
then
course="'/path/to/516/folder/$2'"
elif [ "$1" = "530" ];
then
course="'/path/to/530/folder/$2'"
elif [ "$1" = "599" ];
then
course="'/path/to/599/folder/$2'"
fi
files=$(mdfind 'kMDItemUserTags='$1'' -onlyin /Users/user/Downloads)
#declare -a files=$(mdfind 'kMDItemUserTags='$1'' -onlyin /Users/user/Downloads)
#mv $files $course
#echo "mv $files $course"
#echo $course
for file in $files
#for file in "${files[@]}"
do
#echo $file
#echo $course
mv $file $course
done
其中 $1 是标签 ID 和路径选择的第一部分,$2 是我要将其移动到的星期数文件夹。单引号用于处理文件路径中的间距。我可以很容易地在 python 中做到这一点,但我正在尝试扩展我的能力。每次运行此脚本时,我都会收到以下消息:
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
我最初尝试一次全部移动它们(根据第一个被注释掉的 mv 命令)并得到这个错误,然后尝试了 for 循环和数组,但每次都得到相同的错误。但是,当我取消注释 for 循环中的 echo 语句并手动尝试通过将路径复制并粘贴到命令行来移动每个语句时,它可以完美运行。我最好的猜测是与变量“文件”的格式有关,因为
echo "mv $files $course"
表示它保存的每个文件之间存在换行符或分隔符。
我敢肯定,自从上周我刚开始尝试学习 shell 脚本以来,我就错过了一些超级简单的东西,但是我在网上找不到任何东西可以帮助我解决这个问题。任何帮助将不胜感激。谢谢
【问题讨论】: