Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 339

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 392

Deprecated: parse_url(): Passing null to parameter #1 ($url) of type string is deprecated in /www/wwwroot/blog_qqvbc_com/usr/plugins/Access/Access_Core.php on line 394
mv src/* ./ 移动文件后还有两个.开头的文件没有移动? - Joyber 的博客

原因

bash 的 * 通配符默认不会匹配 .开头隐藏文件.git.env.gitignore),所以 mv src/* ./ 只会移普通文件,隐藏文件留在src目录里面。

千万不要写 mv src/.* ./.*会匹配 ...,会把当前、上级目录也移动,直接炸锅。

方案1(Bash,最稳妥,推荐,composer临时目录迁移场景)

#开启dotglob,让*包含隐藏文件,不包含 . 和 ..
shopt -s dotglob
mv src/* ./
#关闭dotglob,恢复shell默认行为
shopt -u dotglob

执行完,src里面所有(含.git、.env)全部移动到当前目录。

方案2 不修改shell选项,直接写模式

mv src/* src/.[!.]* ./ 2>/dev/null

2>/dev/null 抑制“没有匹配到隐藏文件”的报错。

方案3 find(跨shell通用,脚本里优先用)

find src -mindepth 1 -maxdepth 1 -exec mv {} ./ \;

‑mindepth 1跳过src本身,所有子项(普通+隐藏)全部移动出来,zsh/bash都兼容,不会踩通配符坑。


你刚才composer场景完整实操示例

composer create-project topthink/think temp_proj
cd temp_proj
#把temp_proj里面全部内容(含.git .env)移动到上一级
shopt -s dotglob
mv * ../
shopt -u dotglob
cd ..
rm -rf temp_proj

校验是否全部迁移完成

ls -la

查看是否存在 .git .env 这类点开头文件。

重要提醒:移动前建议先 ls -la src 预览一遍,确认要移动的文件列表,避免误操作覆盖本地已有文件。

标签: none

添加新评论