我已经在我的 CentOS 服务器上安装了 wordpress。
现在,在我的 /var/ww/html 文件夹中,我有一个 wordpress 文件夹。我想将“wordpress”文件夹中的所有文件移动到父目录,即 /var/www/html。
现在我已经阅读了这篇文章 -如何将当前目录下的所有文件移动到上级目录?
我已经尝试了那里建议的命令,并且所有命令行都显示:
[root@servername wordpress]# mv * .[^.]* ..
mv: cannot stat `*': No such file or directory
如何将所有文件移动到一个DIR?
答案1
如果你有 bash 4+(使用 检查bash --version
),你可以简单地使用 dotglob shell 选项来确保 globs 默认包含以.
开头的文件。
shopt -s dotglob ## activate dotglob
mv ./* ../
shopt -u dotglob ## deactivate dotglob
除了减少您需要为这项任务投入的思考量之外,它还具有足够智能的优势,不会匹配.
,..
您无需费心。我更喜欢在 glob 前面加上 ,以./
防止任何以 a 开头的文件名-
被视为选项。
然而,您的错误表明您正在尝试处理一个空目录,或者至少是一个仅包含点文件的目录。默认情况下,如果 glob 与任何文件名都不匹配,bash 会将其直接发送给命令 - 并且由于*
目录中没有文件名称,因此mv
会发送该错误。
答案2
该消息表明没有与“*”匹配的文件。请确保您要移动的文件夹中存在文件或文件夹。如果仅存在以 . 开头的文件或文件夹,则可以运行命令mv .[^.]* ..
将它们向上移动一个目录。通过运行验证所有文件是否都已移动ls -la
,并验证列表是否仅包含此 (.) 和上方 (..) 目录。
答案3
正如其他人所说,您可能正在空目录上运行命令。 执行此操作的另一种方法(在空目录上只会默默失败)是使用 的find
操作-exec
:
find . -exec mv '{}' ../ \;
这会给您带来错误:
mv: cannot move `./' to `../.': Device or resource busy
这是因为我没有find
按文件类型进行限制,所以它也会尝试移动当前目录(.
)并失败。您可以放心地忽略此错误,也可以指定您想要所有类型的文件和文件夹:
find . \( -type f -o -type d \) -exec echo '{}' ../ \;
从man find
:
-exec command ;
Execute command; true if 0 status is returned.
All following arguments to find are taken to
be arguments to the command until an argument
consisting of `;' is encountered. The string
`{}' is replaced by the current file name
being processed everywhere it occurs in the
arguments to the command, not just in argu‐
ments where it is alone, as in some versions
of find. Both of these constructions might
need to be escaped (with a `\') or quoted to
protect them from expansion by the shell.