为文件夹中的每个文件创建一个文件夹,而不是文件夹本身

为文件夹中的每个文件创建一个文件夹,而不是文件夹本身
        | folderA1 | fileA11, fileA12, ...
folderA | folderA2 | fileA21, fileA22...
        |  ...     | ... 

我想复制它,表示为:

        | folderA1 | folderA11, folderA12, ...
folderB | folderA2 | folderA21, folderA22, ...
        | ...      |  ...

原始文件夹A(及其结构)保持原样(不变)。

我正在尝试创建一个文件夹in(文件夹)B 表示(文件夹)A 中的每个文件,不包含文件夹本身。我还想保留原始文件夹(A)的目录结构。

使用这个问题我能够实现上述生成,但它包含文件夹 A 本身。

find source/. -type d -exec mkdir -p dest/{} \; \
   -o -type f -exec mkdir -p dest/{} \;

好像:

         |         | folderA1 | folderA11, folderA12, ...
 folderB | folderA | folderA2 | folderA21, folderA22, ...
         |         | ...

答案1

您可以从那里cd进入folderA并运行命令:

cd folderA
find . -type d -o -type f -exec bash -c '
  for path; do mkdir -p "/path/to/folderB/${path/file/folder}"; done
' bash {} +

参数扩展${path/file/folder}将each重命名fileXYfolderXY.

如果每个文件夹都包含文件,您可以删除-type d -o.

相关内容