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]}”
完成