所以我正在编写一个脚本,它从输入中获取子字符串,这是文件(/path/to/file.ext)
的路径,如果目录(/path/to)
不存在,它将运行mkdir -p /path/to
然后触摸file.ext
。
我的问题是,如果cut
的长度可能未知,我如何使用/path/to
获取/
我的脚本目前看起来像这样
INPUT=$0
SUBSTRING_PATH=`$INPUT | cut -d'/' -f 2`
if [! -d $SUBSTRING_PATH]; then
mkdir -p $SUBSTRING_PATH
fi
touch $INPUT
答案 0 :(得分:4)
而不是cut
,请使用dirname
和basename
:
input=/path/to/foo
dir=$(dirname "$input")
file=$(basename "$input")
现在$DIR
为/path/to
,$FILE
为foo
。
dirname
还会为您提供工作目录相对路径的有效目录(我的意思是$(dirname file.txt)
为.
)。这意味着,例如,您可以编写"$dir/some/stuff/foo"
,而不必担心最终会出现在完全不同的目录树中(例如/some/stuff
而不是./some/stuff
)。
正如@ruakh在评论中提到的那样,如果你没有一个目录,但是你想要丢弃最后一个(可能是csv文件的一行)的一串令牌,一种方法就是"${input%,*}"
,其中逗号可以由任何分隔符替换。据我所知,这是一个bash扩展。我只是编辑它,因为未来的流浪访客可能会比评论中看到更好的运气。对于您的特定用例,dirname
和basename
更适合。