对于我的课程,我们将所有作业和作业都放在只读文件夹中,因此我想在 ssh 登录时将所有这些文件(它们不是很大)复制到我的个人文件夹中。到目前为止,我有时能够让脚本复制文件,但其他时候(总是如果我再次运行它来更新我的文件),它会将所有内容放入另一个同名但带有 ? 的目录中。在最后。我贴了一个 --verbose ,上面写着类似的东西
`/homes/USERNAME/PUBLIC_FOLDER/project_descriptions' -> `/homes/USERNAME/PRIVATE_FOLDER/publicCP\r/project_descriptions'
我不知道为什么它要添加一个 \r 。唯一没有文件的目录是“projects”,并且每次都复制得很好。我尝试过 -r、-R、-rf 和 -RF 但无济于事。最糟糕的是,我什至无法使用第二个 publicCP 目录中的文件,因为 WinSCP (我用它在 chrome 中打开 pdf)说
System Error. Code: 123.
The filename, directory name, or volume label syntax is incorrect
我想这是预料之中的,因为它显示两个 publicCP 的名称完全相同。我对此完全不知所措,谷歌没有帮助,因为它不识别标点符号,当然“-r”告诉它不要搜索任何带有“r”的内容。
我还尝试过 cd'ing 进入私有文件夹并复制没有完整路径的所有内容,但这也不起作用。
答案1
需要删除行尾的回车符,notepad++ 添加了它们,因为它认为这是正确的,但 linux 不喜欢它。
答案2
因为你在上课...
这里有几个可以从命令行获取帮助的地方。
手册页:
man cp
man ssh
信息页面:
info cp
info ssh
需要注意的几个术语:
cp -r
切换到递归复制目录。
“双引号” 用于可能包含空格的目录路径/名称。
“/路径/到我的文件/此处/file.text”
为了帮助解决问题:
确保脚本以“shebang”#! /bin/bash
或 bash 以外的其他 shell 开头。
在添加到脚本之前,使用命令行让命令正确。
验证脚本的模式...
ls -la
-- 查看模式。
sudo chmod a+x /path/file.sh
——改变模式。