没有 sudo,全局模式上的 mv 不起作用

Mel*_*lon 6 shell wildcards rename

我在Ubuntu机器上使用MySQL数据库。

的MySQL数据目录是/var/lib/mysql/,因为我有一个数据库名为“ db_test ”,所以,我有一个名为db_test//var/lib/mysql/。所有表格信息都在/var/lib/mysql/db_test/

/var/lib/mysql# ls
db_test

/var/lib/mysql# cd db_test
/var/lib/mysql/db_test# ls
cars.frm
cars.MYD
cars.MYI
customers.frm
customers.MYD
...
Run Code Online (Sandbox Code Playgroud)

我想要实现的很简单,只需要新建一个名为“ backup ”的目录,并将其下的所有文件移动 /var/lib/mysql/db_test/到该/var/lib/mysql/backup/目录下。因此,我在主目录的子目录下运行以下命令:

~/tmp$ sudo mkdir /var/lib/mysql/backup
~/tmp$ sudo mv /var/lib/mysql/db_test/* /var/lib/mysql/backup
Run Code Online (Sandbox Code Playgroud)

第一个mkdir命令成功运行,我确实在下面得到了一个名为“backup/”的新目录/var/lib/mysql/

但是第二个命令失败,并显示以下错误消息:

mv: cannot stat `/var/lib/mysql/db_test/*': No such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么??我有db_test/目录,/var/lib/mysql/里面有很多表文件,为什么会出现错误信息?

PS 我知道只有 root 用户可以访问/var/lib/mysql/. 这可能是原因吗?(但我用过sudo),但我不确定......以及如何摆脱它?

Mat*_*Mat 12

$ sudo mv /var/lib/mysql/db_test/* /var/lib/mysql/backup
Run Code Online (Sandbox Code Playgroud)

当您键入该内容时,您用户的 shell 会尝试展开/var/lib/mysql/db_test/*. 如果您的用户无权访问该目录,则会失败,并且不会进行任何替换。

所以mv运行的命令sudo/var/lib/mysql/db_test/*作为文字文件名。不存在具有此类名称的文件。

尝试:

$ sudo sh -c 'mv /var/lib/mysql/db_test/* /var/lib/mysql/backup'
Run Code Online (Sandbox Code Playgroud)

但你应该真的真的可以考虑使用数据库工具来进行数据库备份。