如何创建主文件夹子文件夹和文件名

如何创建主文件夹子文件夹和文件名

我有一个场景,我想创建一个主文件夹子文件夹子文件夹并在该子文件夹中创建文件

我的文本文件包含以下格式

ABC|A1|B1|A.txt
ABC|BB|CD|AF|JIDS.txt
ABC|BB|CDE|AFD|KL|JI.pdf

上面的文件需要以for循环的形式传递让我们以第一条记录为例

ABC|A1|B1|A.txt

ABC -> 主文件夹
A1 -> 子文件夹
B1 -> 子文件夹
A.txt -> 是一个文件

应创建此格式的文件夹

ABC{Main folder}-->
                  |=> A1 {Subfolder}-->
                                      |=> B1 {child folder}-->
                                                             |=>A.txt {file inside child folder}

答案1

对于每一行,将所有|- 字符更改为/形成路径名,创建目录,在路径名末尾创建文件。

tr '|' '/' <file |
while IFS= read -r pathname; do
    mkdir -p "$(dirname "$pathname")" &&
    touch "$pathname"
done

结果:

$ tree ABC
ABC
|-- A1
|   `-- B1
|       `-- A.txt
`-- BB
    |-- CD
    |   `-- AF
    |       `-- JIDS.txt
    `-- CDE
        `-- AFD
            `-- KL
                `-- JI.pdf

8 directories, 3 files

解释:

  • tr命令会将所有|- 字符替换为/,并生成类似以下内容的内容:
    ABC/A1/B1/A.txt
    ABC/BB/CD/AF/JIDS.txt
    ABC/BB/CDE/AFD/KL/JI.pdf
    
  • 上面的输出tr是通过循环逐行读取的while。在每次迭代中$pathname都会有一行来自此输出。
  • 在每次迭代中,dirname "$pathname"返回目录部分$pathname(例如,ABC/A1/B1对于第一次迭代)。这用于mkdir -p创建可能丢失的目录的调用。创建中间目录-p的选项mkdir
  • touch用于实际创建由$pathname刚刚创建的目录中引用的文件mkdir
  • &&之间的字符确保我们不会尝试在(无论出于何种原因)无法创建的目录中创建文件。mkdirtouchmkdir

相关内容