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

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

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

例如:

我在,workingdir里面有folder1,,,等等folder2folder3

现在文件夹 1、2 和 3 已经是工作目录中的主要目录,但是当我们到达时,folder4其中有一个子目录,它的名称folder4与内容相同,并继续folder5folder6直到folder100andsomething

我想要运行一个命令,将子目录folder4及其folder100andsomething内容从父目录移出,并移到工作目录中,这样最终我将得到folder1-folder100andsomething作为主目录和一堆错误的空父目录。要清理,我可以运行一个命令来删除所有空的父目录。

答案1

使用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等)。替换只是重复的部分 (so, just folder4)。

-n选项仅显示将进行哪些更改。如果更改看起来没问题,则无需该选项即可运行以实际执行更改。

相关内容