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

#1 楼

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

mv myfolder/* .


数据在/home/myuser/myfolder中,然后从/home/myuser/运行命令。

评论


如果归档文件包含点文件,则可能还需要匹配。*,而不仅仅是*。还要在末尾添加`&& rmdir myfolder`以删除现在无关的文件夹。这样可以节省时间,因为它仅在mv返回成功时运行,并且因为rmdir不会删除非空目录。

–卡莱布
11年8月24日在20:53

。*上的好点。删除原始文件夹既简单又不需要,因此我们让OP自己处理。

– Rudu
11年8月24日在20:57

@Caleb是否可以在一行中同时编写*和。*?好奇而已

–理查德
2012年11月13日在20:40

@Richard是的。 mv的参数都将是源,除了LAST参数需要作为移动目标(并且在使用多个源的情况下,必须是文件夹)。

–卡莱布
2012年11月13日20:50

我正在使用bash:/ bin / mv:参数列表过长

–dragosrsupercool
2014年11月17日7:46



#2 楼

只是为了使内容清晰易懂,请参考上述Rudu的答案和注释。

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

 mv subfolder/* subfolder/.* .


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

评论


它有效,但是我得到了MV:重命名fake /。到./ .:无效的参数,而mv:将fake / ..重命名为./ ..:无效的参数

–马斯洛
19年7月19日在14:52

如果不确定目标文件夹中是否包含文件夹和文件,则分别运行命令,否则将提示:“未找到匹配项”

–托尔吉尼奥
7小时前

#3 楼

可以通过以下方法实现:



使用rsync

rsync -vua --delete-after foo/ .



使用cprmdir

cp -vaR foo/. . && rmdir foo/



使用mv(启用了dotglob选项):

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。 br />
mv foo/* foo/.[^.]* . && rmdir foo/


注意:它将丢失名为mv的文件。

注意:对于POSIX外壳,您需要foo/..bar..。 />

评论


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

– rjmunro
17年2月7日在16:59

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

– Kenorb
17年2月7日在17:03

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

–StéphaneChazelas
17年2月7日在17:24



应该提到的是rsync -vua --delete-after foo /。删除当前目录中可能已经存在的所有其他内容。

–大卫
18年4月24日在10:12

#4 楼

只需发出mv命令

mv (directory)/* .


如果要删除目录,则添加

rm -rf (directory)


您在(目录)的父目录中

如果在(目录)内,则

mv * ../


评论


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

– Anko
2014年6月14日11:40



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

– Mark Lalor
15年11月21日在15:03

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

– AkselA
17-2-7在15:24



#5 楼

我有一个简短的命令

cp */* .


这将在上级复制所有子文件夹的内容
当然可以使用move

mv */* .


或分配新的区域

cp */* /destination 


#6 楼

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

移动文件

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

复制文件

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

评论


上面的问题询问有关移动不复制内容的问题。这样可以通过将原始文件放在子文件夹中来复制文件。是否作为“共享”服务器也确实与此无关。

–卡莱布
2014年6月14日在11:04

您的权利,这就是答案...

–里卡多·豪克(Ricardo Havoc)
14年6月14日,11:11

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

–卡莱布
14年6月14日在11:16

我不同意共享服务器与它无关。输入“ dir”的方式与众不同。

–里卡多·豪克(Ricardo Havoc)
14年6月14日在11:17

花花公子你为什么这么生气?...哇...我只是在分享一点知识。我们每个人都有不同的理解,并以不同的方式面对不同的技术问题...祝你好运Caleb ..

–里卡多·豪克(Ricardo Havoc)
14年6月14日在11:19

#7 楼

如果通过使用mv * ../收到“参数列表太长”错误,我建议改为这样做:

find:符合所需条件

-name:运行后面的命令

-exec:插入找到的文件名

{}:标记exec命令的结尾


#8 楼

我认为最好的答案肯定是:
mv myfolder/mysubfolder .

有时您会遇到两个文件夹具有相同名称的问题
mv myfolder myfolder.old 
mv myfolder.old/myfolder . 
rmdir myfolder.old