Linux 如何根据文本文件中给定的路径创建文件夹和文件

Linux 如何根据文本文件中给定的路径创建文件夹和文件,linux,bash,Linux,Bash,我有一个名为creating.txt的文本文件。在此文件中,每行都有一个路径 若该行以D开头,则表示我必须创建目录 如果行以F开头,我必须创建一个文件 例如: D:/root/F1/Cat1 F:/root/F1/file1.txt D:/root/F1/Cat1/Cat2 我需要逐行检查,首先检查第一个字母是D还是F,然后忽略:和第一个字母,并根据给定的路径相应地创建一个文件或目录。如果行中的第一个字母不是D或F,请忽略该行 此外,如果文件已经存在,我不允许创建另一个 我尝试使用awk:

我有一个名为
creating.txt
的文本文件。在此文件中,每行都有一个路径

  • 若该行以
    D
    开头,则表示我必须创建目录
  • 如果行以
    F
    开头,我必须创建一个文件
例如:

D:/root/F1/Cat1
F:/root/F1/file1.txt
D:/root/F1/Cat1/Cat2
我需要逐行检查,首先检查第一个字母是
D
还是
F
,然后忽略
和第一个字母,并根据给定的路径相应地创建一个文件或目录。如果行中的第一个字母不是
D
F
,请忽略该行

此外,如果文件已经存在,我不允许创建另一个

我尝试使用
awk

path=`awk { print } creating.txt`
touch $path

但问题是它读取整个文件(不是逐行读取),因此只能有一行。另外,我不知道如何忽略
D:
F:

这可以用两个2-1行程序来完成

我转载了你的意见:

$ cat creating.txt
D:/root/F1/Cat1
F:/root/F1/file1.txt
D:/root/F1/Cat1/Cat2
您可以使用它来创建目录

$ for path in `grep ^D creating.txt | cut -d: -f2`; do mkdir -p "$path";done
然后,对于文件

$ for file in `grep ^F creating.txt | cut -d: -f2`; do touch "$file";done
说明:
grep将选择以D(或F)开头的行(如我使用的^)

剪切将使用“:”作为分隔符捕捉第二个字段,这是一个
bash
脚本,它将按照您的要求执行:

#!/bin/bash

while IFS= read -r line; do
    [[ $line =~ (.):(.*) ]]
    [[ ${BASH_REMATCH[1]} == D ]] && mkdir -p "${BASH_REMATCH[2]}"
    [[ ${BASH_REMATCH[1]} == F ]] && [[ ! -d ${BASH_REMATCH[2]%/*} ]] && mkdir -p "${BASH_REMATCH[2]%/*}"
    [[ ${BASH_REMATCH[1]} == F ]] && touch "${BASH_REMATCH[2]}"
done < creating.txt
#/bin/bash
而IFS=读取-r行;做
[$line=~(:(.*)]
[${BASH_REMATCH[1]}==D]&&mkdir-p“${BASH_REMATCH[2]}”
[[${BASH_REMATCH[1]}==F]]&&[!-d${BASH_REMATCH[2]/*}]&&mkdir-p“${BASH_REMATCH[2]/*}”
[${BASH_REMATCH[1]}==F]]&&touch“${BASH_REMATCH[2]}”
完成