command line

主文件夹内容丢失:错误使用rm

我使用的是Ubuntu-Mate 20.04,我的home文件夹中的大部分内容都丢失了。我认为这可能是由于错误地使用了sudo的 "rm "命令,但不确定是否可能是其他原因。

我解释一下。我试图删除一个文件夹("targetfolder(something)")和它在/home/user2的内容,同时以user1的身份登录(user1有sudo权限)。所以,我做了。

sudo rm -r /home/user2/targetfolder (something)/ 

起初rm由于有括号而给出了一些错误信息--我指的是这个:()--,所以我用*替换了文件夹的部分名称,并做到了。

sudo rm -r /home/user2/targetfolder */

注意:我也许对文件夹的名称使用了引号,因为有空白('targetfolder *'),尽管最后在终端注册的命令没有引号。

按照我的理解,rm应该只删除用户2的主文件夹中名称以 "targetfolder "开头的任何文件夹,但它似乎删除了用户1的主文件夹的主要部分。我补充说,由于我不清楚rm是否起作用,所以我关闭了终端,我想,杀死了这个过程。

以防万一,用户1和用户2的主文件夹都是用ecryptfs加密的(要删除的/home/user2的文件夹在.Private之外,因此是未加密的)。

因此,我的问题是,我使用的rm命令是否会删除user1的home文件夹的内容(甚至影响系统)。

我有一份丢失内容的最新备份,但我想确定这不是由于rm命令以外的其他问题造成的。

提前感谢,并对我的英语感到抱歉。


This command

sudo rm -r /home/user2/targetfolder */

会尝试删除可能不存在的文件夹 /home/user2/targetfolder ,然后删除匹配的项目 */ 。这意味着当前工作目录中存在所有非隐藏目录(及其内容)。如果当前工作目录是 user1 的主目录,那么是的,这就是会受到影响的目录。

错误不是逃离空间。空格是分隔参数的分隔符。 -r 旁边), /home/user2/targetfolder*/ ,后者由 shell 扩展以匹配所有非隐藏子目录(例如 Documents/Videos/ 等。 )

引用文件名模式,或转义空格,如在

sudo rm -r "/home/user2/targetfolder "*/

or

sudo rm -r /home/user2/targetfolder\ */

将包括 /home/user2/targetfolder (something)/ 和其他匹配的文件夹(如果有)。

一般来说,根据您的经验,使用 rm -r 然后与 sudo 结合使用是非常危险的。不要立即执行这样的命令,而是先验证。

  • sudo rm -r 替换为ls ls -d 。这将列出您的论点中包含的所有项目,并允许您预先验证将要删除的内容(感谢 cocomac 的提示)。
  • 一旦 ls 列出了您希望删除的内容,请按召回该命令并将 ls -d 更改为 sudo rm -r

如果必须删除单个目录,请完全避免使用通配符。使用制表符完成。这样,你就能确保在命令行中正确输入具体的名称。