我想知道是否可以将我的工作目录中的所有子目录及其内容移动到工作目录中,以便子目录成为树中的主目录。
例如:
我在,workingdir
里面有folder1
,,,等等folder2
folder3
现在文件夹 1、2 和 3 已经是工作目录中的主要目录,但是当我们到达时,folder4
其中有一个子目录,它的名称folder4
与内容相同,并继续folder5
,folder6
直到folder100andsomething
。
我想要运行一个命令,将子目录folder4
及其folder100andsomething
内容从父目录移出,并移到工作目录中,这样最终我将得到folder1
-folder100andsomething
作为主目录和一堆错误的空父目录。要清理,我可以运行一个命令来删除所有空的父目录。
答案1
使用find
和rename
:
$ 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
选项仅显示将进行哪些更改。如果更改看起来没问题,则无需该选项即可运行以实际执行更改。