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

时间:2018-02-22 10:01:19

标签: bash mkdir

我编写了以下小脚本来读取文件,在磁盘上提取搜索路径并使用mkdir创建它,现在由于某种原因,它创建的所有目录都有一个尾随?行军人物或可能是a / 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?

并且?标记不应该在那里

1 个答案:

答案 0 :(得分:0)

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

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

在输入文件上使用dos2unix

但是你可以用一个sed替换整个while循环:

#! /bin/bash

sed -n -e 's/^[^=]*=\(\/opt[^=]*\).*$/\1/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可以一次创建多个目录。