将当前目录中的所有文件上移一个目录

将当前目录中的所有文件上移一个目录

我已经在我的 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. 

相关内容