我会bash
使用来完成此操作globstar
。如中所述man bash
:
globstar
If set, the pattern ** used in a pathname expansion con‐
text will match all files and zero or more directories
and subdirectories. If the pattern is followed by a /,
only directories and subdirectories match.
因此,要将目录run
移到顶层目录x
,然后删除其余目录,可以执行以下操作:
shopt -s globstar; mv x/**/run/ x/ && find x/ -type d -empty -delete
该shopt
命令启用该globstar
选项。在mv x/**/run/ x/
将命名任何子目录移动run
(注意,如果只有一个这仅适用run
目录)x
和find
将删除任何空目录。
如果愿意,您可以使用扩展的glob在shell中完成整个操作,但是我更喜欢使用安全网,find -empty
以确保不会删除任何非空目录。如果您不在乎,可以使用:
shopt -s globstar; shopt -s extglob; mv x/**/run/ x/ && rm -rf x/!(run)