![cp .* /home/name 删除 /home/name 中的所有文件](https://linux22.com/image/1181004/cp%20.*%20%2Fhome%2Fname%20%E5%88%A0%E9%99%A4%20%2Fhome%2Fname%20%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6.png)
不久前,我为我的笔记本电脑买了一个新的 ssd,所以我把所有东西都放到了新驱动器上,用了一段时间,没有问题。我决定把旧驱动器放回我的笔记本电脑,把新的 ssd 放进一个 nvme-USB 连接器。我想复制我的个人文件,但我不确定一切是否都会按计划进行,所以我把 /home/name 中的所有内容都移到了 /home/name/oldstuff 这个新文件夹中,这样我就可以返回了。我脑子里一时犯了错误,一开始用的是 mv 而不是 cp:
cd /media/drive/home/name
mv * /home/name
但遗漏了所有以“.”开头的文件,所以我做了
cp .* /home/name
我开始收到与相对路径 ./../othername 中的内容的权限相关的错误,我认为最安全的做法是按 CTRL+C,然后执行
cp .[a-z]* /home/name
完成后,/home/name 中的所有内容都消失了(包括我做的错误位置的备份),其中一些内容相当重要。我有什么办法可以恢复它们吗?
答案1
使用如下全局字符*
应该非常小心地做并且您应该知道它们如何被您的 shell 扩展并作为参数传递给您的命令。
*
将扩展至包括以下文件和目录当前目录。.*
将扩大到包括当前目录.
和上一级目录..
。.[a-z]*
将扩大到包括当前目录中的隐藏文件/目录,其名称首字母为小写。
例如,要查看如何.*
在您的系统上运行扩展,set -x
然后运行:
ls .*
或者echo
像这样使用来打印扩展列表:
echo .*
或者使用readlink -f
来获取扩展列表的完整路径,如下所示:
readlink -f .*