【问题标题】:Scan a file, get path and create directory from path扫描文件,获取路径并从路径创建目录
【发布时间】:2018-02-22 10:01:19
【问题描述】:

我编写了以下小脚本来读取文件,在磁盘上提取搜索路径并使用 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?

? 标记不应该在那里

【问题讨论】:

  • 您能提供文件中的内容吗?

标签: bash mkdir


【解决方案1】:

您的输入文件很可能包含 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 可以一次创建多个目录。

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多