扫描文件,获取路径并从路径创建目录

Scan a file, get path and create directory from path

我编写了以下小脚本来读取文件,提取磁盘上的搜索路径并使用 mkdir 来创建它,现在出于某种原因在它创建的所有目录上它都有一个尾随?行进字符或可能是 /w

我做错了什么?

#! /bin/bash
echo "which file do you want to scan: "
read input 
file=`echo $input | tr -d '[:space:]' | tr '[:upper:]' '[:lower:]'` 
#echo $file

while IFS= read -r  line; do
    a="$(cut -d'=' -f2 <<<"$line")"
    if [[ "$a" =~ /opt.* ]]; then
        echo $a
        mkdir -p $a
    fi
done < "$file"

脚本的结果如下所示:

/opt/dir/foo01/arch:
aggr_rec?  aggr_rec_tag?  input?  input_tag?

并且 ? 标记不应该存在

您的输入文件很可能包含 DOS 行结尾 \r\n。示例:

$ mkdir -p /tmp/dos/file$'\r'
$ ls /tmp/dos
file?

对输入文件使用 dos2unix

但是你可以用一个 sed:

替换整个 while 循环
#! /bin/bash

sed -n -e 's/^[^=]*=\(\/opt[^=]*\).*$//p' <<EOF |
a=/tmp/1
b=/opt/2
c=/tmp/3
d=/opt/4
EOF
xargs -n1 echo mkdir

删除 echo 以创建目录。

sed 选项 -n 告诉 sed 只为 s 的成功替换生成输出。这会执行 /opt 前缀过滤。

xargs 选项 -n 告诉 xargs 只使用一个参数,但这是可选的,因为 mkdir 可以一次创建多个目录。