将所有子目录及其内容移动到当前工作目录


0

我想知道是否可以将工作目录中的所有子目录及其内容移动到工作目录中,以便子目录成为树中的主目录。

例如:

我在workingdir,里面我们有folder1folder2folder3,等

现在文件夹1,2,和3已经在工作目录内的主要目录,但是当我们到folder4那里是一个子目录内具有相同的名称folder4,然后内容,这样下去folder5folder6folder100andsomething

我想是运行一个命令移动子目录folder4一路folder100andsomething它们的内容出来的父目录一起,进入工作目录,所以最后我会folder1- folder100andsomething作为主目录和一堆错误的空父母。要清理,我可以运行命令以删除所有空的父目录。


你不可以mv folder4/* $(pwd)吗?
Stephen M. Webb

那也会移动所有子目录的内容吗?文件夹5-100呢?实际上,目录的名称也不像示例中那样简单
Johnny

基本上,我不想一个一个地拖放每个子目录,必须有一种方法可以通过命令行对所有子目录进行超级拖放。没有?
约翰尼

换句话说,在folder4中,我们还有1-100个其他文件夹,其中包含内容。
George Udosen

抱歉,我可能不清楚。Folder4仅包含子目录folder4,并且此子目录具有内容。然后,将folder5与folder4放在同一工作目录中。同样,Folder5具有子目录folder5,该目录具有更多内容,然后我们拥有具有子目录folder6 + content的folder6,等等,等等
约翰尼

Answers:


0

findrename

$ find . -mindepth 3 | rename -n 's:([^/]+)/\1:$1:'  
./folder10/folder10/blah10 -> ./folder10/blah10
./folder9/folder9/blah9 -> ./folder9/blah9
./folder8/folder8/blah8 -> ./folder8/blah8
./folder7/folder7/blah7 -> ./folder7/blah7
./folder6/folder6/blah6 -> ./folder6/blah6
./folder5/folder5/blah5 -> ./folder5/blah5
./folder4/folder4/blah4 -> ./folder4/blah4

正则表达式([^/]+)/\1匹配重复的文本,并且/中间有一个(so folder4/folder4,等)。替换只是重复的部分(所以只是folder4)。

-n选项仅显示将要进行的更改。如果更改看起来确定,请在没有更改的情况下运行以实际执行更改。


好的,谢谢muru的回答,我在一个小目录上进行了快速测试,并在很大程度上进行了测试。唯一的问题是某些子目录的名称与其父目录略有不同。在这种情况下,正则表达式不起作用。
约翰尼

@Johnny没有办法在想要移动的子文件夹和其他子文件夹之间进行区分,这会很冒险。您是否要将所有子文件夹上移一个级别,例如,您要做./folderX/folderY/fileA什么?
大师

是的,基本上我想将所有子目录上移一个级别。使用./folderX/folderY/fileA我希望folderY向上移动一个级别,并保留其内容,使其位于folderX旁边。folderX随后将为空,我可以运行find。键入d -empty -delete删除空目录
Johnny

这可能吗?我找不到执行此操作的命令
约翰尼

尝试使用类似模式's:([^/]+)/([^/]+):$2:'
muru
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.