扫描文件,获取路径并从路径创建目录
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
可以一次创建多个目录。
我编写了以下小脚本来读取文件,提取磁盘上的搜索路径并使用 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
:
#! /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
可以一次创建多个目录。