将文件夹内容上移一级


127

我有一个解压缩的目录,但是在一个文件夹中。如何将内容上移?我正在通过SSH访问CentOS。

Answers:


189

使用名为“ myfolder”的文件夹并在文件层次结构中上一层(您要放置的位置),该命令将为:

mv myfolder/* .

因此,例如,如果数据在其中,/home/myuser/myfolder则从/home/myuser/命令运行。


35
您可能还需要匹配,.*不仅是*存档包含点文件。还要在末尾添加`&& rmdir myfolder`以删除现在无关的文件夹。这样可以节省时间,因为它仅在mv返回成功时运行,并且因为rmdir不会删除非空目录。
卡雷布(Caleb)

好点的.*。删除原始文件夹既琐碎又没有要求,因此我们让OP亲自处理。
Rudu 2011年

1
@Caleb是有可能写都*.*在同一行?只是好奇心
理查德(Richard)

2
@Richard是的。mv除了LAST参数外,所有参数都将是源,而LAST参数则需要作为移动目标(对于多个源,则需要是一个文件夹)。
Caleb 2012年

1
我越来越/bin/mv: Argument list too long
扑朔迷离

26

只是为了使内容清晰易懂,摘自Rudu的上述答案和评论。

如果您需要移动所有内容,则包括以开头的文件。(例如.htaccess,.git等),您需要在命令中同时包含*和。*。像这样:

 mv subfolder/* subfolder/.* .

这会将子文件夹的内容移动到您的当前文件夹。注意最后一个“。”之前的空格。


它的工作原理,但我得到mv: rename fake/. to ./.: Invalid argumentmv: rename fake/.. to ./..: Invalid argument
马斯洛

16

可以通过以下方法实现:

  • 使用rsync

    rsync -vua --delete-after foo/ .
  • 使用cprmdir

    cp -vaR foo/. . && rmdir foo/
  • 使用mvdotglob启用选项):

    shopt -s dotglob # Includes filenames beginning with a dot.
    mv -- foo/* .    # Where foo/ is the folder consisting the files.
    shopt -u dotglob # Disables previously enabled dotglob option.

    foo/您的文件夹在哪里,其内容将被上移。

    请参阅:help shoptman bash

  • 使用mv(如建议在这里):

    mv foo/* foo/.[^.]* . && rmdir foo/

    注意:它将丢失名为的文件foo/..bar..

    注意:对于POSIX shell,您需要[!.]


什么是rsync的开关-v-u-a-r在做什么?AFAICT -v非常冗长,这只会使rsync打印更多信息。-u表示更新-仅复制较新的文件。那似乎无关紧要。-a表示存档。这将复制文件的所有者和权限,并使同步递归。-r表示递归,但是已经被覆盖了-a
rjmunro

-u当您不想花费额外的时间移动已经存在的数据时(特别是对于慢速存储设备),此功能非常有用。我已删除了-r,因为它已-a如您所述被覆盖。
kenorb

1
mv foo/* foo/.[^.]* .例如会丢失一个名为的文件foo/..bar..。请注意,对于POSIX shell,您需要[!.]
斯特凡Chazelas

应该提到的是,它rsync -vua --delete-after foo/ .会删除当前目录中可能已经存在的所有其他内容。
戴维(David)

7

只是发出一个mv命令

mv (directory)/* .

如果要删除目录,请添加

rm -rf (directory)

假设您位于(directory)的父目录中

如果您位于(目录)中,则

mv * ../

13
其他安全提示:删除目录时,您知道应该为空,rmdir如果目录不为空,rm -r则会抱怨并退出,而只是删除了目录及其所有内容。(这是一个poka-yoke。)
Anko 2014年

好点!我想不出这样做的理由。
Mark Lalor

@MarkLalor原因之一可能是存在隐藏文件,例如.DS_storemacOS中无处不在。mv上面的命令不会移动这些命令(未dotglob设置)。
AkselA

0

对于共享服务器上的这些人,您必须使用类似的内容

移动文件

mv -v ~/public_html/public_html/* ~/public_html/

复制文件

cp -a ~/public_html/public_html/* ~/public_html/


2
上面的问题询问有关移动不复制内容的问题。这样可以通过将原始文件放在子文件夹中来复制文件。还是作为“共享”服务器,这实际上与它没有任何关系。
Caleb 2014年

1
您的权利,这就是答案了……
里卡多·豪沃克

2
重新进行编辑:与已经投票的答案有何不同?“共享服务器”与它有什么关系?如果这将是一个有用的贡献,可以为已经存在的内容增加价值,请进行编辑以解释这些项目。
Caleb 2014年

1
我不同意共享服务器与它无关。在进入“目录”的方式,使一个不同的世界..
里卡多浩劫

1
花花公子为什么你这么生气?...哇...我只是在分享一点知识。我们都有不同的理解,并以不同的方式面对不同的技术问题……祝你好运Caleb ..
Ricardo Havoc 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.