我有一个文件(比如说list.txt),它包含文件的相对路径,每行一个路径,即这样的东西:
foo/bar/file1
foo/bar/baz/file2
goo/file3
Run Code Online (Sandbox Code Playgroud)
我需要编写一个bash脚本,一次处理一个路径,在最后一个斜杠处拆分,然后启动另一个进程,将两个路径作为参数提供给它.到目前为止,我只有循环部分:
for p in `cat list.txt`
do
# split $p like "foo/bar/file1" into "foo/bar/" as part1 and "file1" as part2
inner_process.sh $part1 $part2
done
Run Code Online (Sandbox Code Playgroud)
我怎么拆分?当路径没有斜线时,这会在退化的情况下工作吗?
谢谢
pio*_*kuc 102
使用basename和dirname,这就是你所需要的.
part1=`dirname "$p"`
part2=`basename "$p"`
Run Code Online (Sandbox Code Playgroud)
gni*_*urf 14
适当的100%bash方式,对于有空格或有趣符号的文件名是安全的(提供inner_process.sh正确处理它们,但这是另一个故事):
while read -r p; do
[[ "$p" == */* ]] || p="./$p"
inner_process.sh "${p%/*}" "${p##*/}"
done < list.txt
Run Code Online (Sandbox Code Playgroud)
并且它不会为每个文件分叉dirname和basename(在子shell中).
[[ "$p" == */* ]] || p="./$p"这里的行是为了以防万一$p,不包含任何斜杠,然后它会./在它之前.
有关和符号的详细信息,请参阅" Bash参考手册"中的" Shell参数扩展"部分.%##
我从这个来源找到了一个很好的解决方案。
p=/foo/bar/file1
path=$( echo ${p%/*} )
file=$( echo ${p##*/} )
Run Code Online (Sandbox Code Playgroud)
这也适用于路径中的空格!
| 归档时间: |
|
| 查看次数: |
53358 次 |
| 最近记录: |