递归展平根目录中的子目录并维护1级子目录结构

sheth7

我有一个大型的n级目录,结构如下:

root
  |
   subdir1
      |
       sub_subdir1
           |
            ....(n-2 levels).....
                                 |
                                  file1
  |
   subdir2
      |
       sub_subdir2
           |
            ....(n-2 levels).....
                                 |
                                  file2

我想展平目录,以便所有1级子目录都包含文件我还想删除(n-1)sub_subdirs的级别2,因为它们不包含任何文件。请注意,所有子目录都有不同的名称。

所需结果

root
  |
   subdir1
      |
       file1
  |
   subdir2
      |
       file2

我发现有很多文章解释了扁平化目录的方法,但是没有任何一篇文章解释如何以受控方式进行此操作,即

  • 通过指定要展平的水平
  • 或递归地对根目录中的所有sub_directory执行此操作
杰夫·谢勒(Jeff Schaller)

使用zsh:

cd /root
for subdir in subdir*
do
  mv "$subdir"/**/*(.) "$subdir"
  rm -r "$subdir"/*(/)
done

这:

  1. 更改为“ / root”目录(来自您的示例)
  2. 循环遍历每个命名的子目录subdir*(同样从您的示例中:匹配subdir1和subdir1)
  3. 将子目录下的(预期的,但将匹配所有的)匹配文件移动到该子目录中。它使用zsh的**递归globing功能,然后受glob限定符的限制,该限定符*(.)表示:此目录中的任何条目都是纯文件
  4. 移动文件后,以递归方式删除该子目录下的每个子目录;这再次使用zsh glob限定符*(/),该限定符表示匹配作为目录的条目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章