使用Bash脚本从Ubuntu复制文件到Windows目录时出现“文件或目录不存在”错误的求助
Bash脚本从Ubuntu复制文件到Windows目录时出现“文件或目录不存在”错误的求助
嘿,我来帮你分析下可能的原因,试试这些办法解决问题:
我在bash脚本里执行这条命令时遇到了错误:
sudo cp openssl/localhost.pfx /mnt/c/Users/bob/.aspnet/https
错误提示是:cp: cannot create regular file '/mnt/c/Users/bob/.aspnet/https': No such file or directory
但我确认Windows这边对应的目录是存在的,想知道这是怎么回事?
- 先确认WSL里能不能看到目标目录:别着急复制,先在WSL终端里执行
ls /mnt/c/Users/bob/.aspnet/,看看能不能列出https这个目录。如果看不到,大概率是WSL和Windows的文件系统同步有问题,或者权限导致你(甚至sudo后的root)看不到这个目录。 - 检查目标路径是目录还是文件:用
ls -ld /mnt/c/Users/bob/.aspnet/https查看路径类型,如果输出开头是-(表示是文件),那问题就来了——你要复制到目录里,但这个路径现在是个文件,cp自然会报错。这种情况先把同名文件删掉或重命名再试。 - 刷新WSL的Windows分区挂载:有时候Windows里新建了目录,但WSL没同步上,你可以执行这两条命令重新挂载C盘:
之后再检查目录是否能访问。sudo umount /mnt/c sudo mount -t drvfs C: /mnt/c - 留意路径的大小写:Windows不区分大小写,但WSL是严格区分的!仔细核对你的路径,比如
.aspnet是不是写成了.AspNet,https是不是拼写成HTTPS了?哪怕一个字母大小写错了,WSL都会找不到路径。 - 权限映射的坑:虽然你用了
sudo,但WSL里的root用户和Windows的权限不是完全对应的。如果Windows里的https目录权限设置比较严格,WSL的root可能也没有写入权限。你可以先试试在Windows里给这个目录开放“所有用户”的写入权限,再回到WSL里尝试复制。
备注:内容来源于stack exchange,提问作者CraxFelcore
相关产品推荐
相关产品推荐

