linux - 使用 ls 将文件存储到列表中,同时使用 sed 删除部分目录名
问题描述
我有一个文件夹可以说位于此处:
/Users/spotter/Downloads
在根文件夹中有两个文件:
test1.txt
和test2.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
解决方案
问题是 sed 认为 '/' 是 RE 和替换之间的分隔符,因此 sed 没有按照您想要的方式读取另一个 '/'。您可以使用其他字符作为分隔符。例如's~/Users/spotter/~~'
.
推荐阅读
- node.js - socket.io 房间是否共享变量?
- rust - llvm-sys - 没有找到可用的系统范围的 LLVM
- .htaccess - Ultimate Generic .htaccess 通配符子域重写为“www”。- 这是有效的吗?
- javascript - 如何在没有 console.log 的情况下访问与 console.log(Error('example')) 相同的功能
- android - 为用户获取所有 Instagram 故事的 API?
- python - TypeError:'float'对象在python 3中不是可迭代错误
- java - actionListener 和循环与 if-else 的组合
- c - C 编程:参数:无法转换为 int*
- c++ - 如何编写工厂方法;我在遵循 C++ 代码时出错
- node.js - WebSocket 错误,意外响应代码:200 与 Nginx 和 Node.js