首页 > 解决方案 > 使用 ls 将文件存储到列表中,同时使用 sed 删除部分目录名

问题描述

我有一个文件夹可以说位于此处:

/Users/spotter/Downloads

在根文件夹中有两个文件:

test1.txttest2.txt

我想编写一个shell脚本来将所有文件保存到一个列表中,如下所示:

file_list="$(ls /Users/spotter/Downloads)"

并将echo $file_list返回:

/Users/spotter/Downloads/test1.txt /Users/spotter/Downloads/test2.txt

但是我想更改部分目录名。特别是我想删除/Users/spotter部分。

我这样尝试过:

file_list="$(ls /Users/spotter/Downloads | while read path; do dirname "$path" | sed 's/users/spotter///'; done)"

返回:

sed: 1: "s/users/spotter/Downloa ...": bad flag in substitute command: 'D'

sed: 1: "s/users/spotter/Downloa ...": bad flag in substitute command: 'D'

当我这样做时,echo $file_list我希望这是输出:

Downloads/test1.txt Downloads/test2.txt

标签: linux

解决方案


问题是 sed 认为 '/' 是 RE 和替换之间的分隔符,因此 sed 没有按照您想要的方式读取另一个 '/'。您可以使用其他字符作为分隔符。例如's~/Users/spotter/~~'.


推荐阅读