我有一个场景,我想创建一个主文件夹子文件夹子文件夹并在该子文件夹中创建文件
我的文本文件包含以下格式
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
。- 和
&&
之间的字符确保我们不会尝试在(无论出于何种原因)无法创建的目录中创建文件。mkdir
touch
mkdir