当我跑步时
find ~/foo/bar/. -mindepth 1 -maxdepth 1 -type d
我得到给定路径的所有子目录的输出。例如
/home/user/foo/bar/a
/home/user/foo/bar/b
...
/home/user/foo/bar/abcd
现在我想将该输出用作字符串,所以我添加-print
以替换一些找到的结果
find ~/foo/bar/. -mindepth 1 -maxdepth 1 -type d -print | xargs sed 's#/home/user/foo/bar/#some_text"#g'
但结果并不如预期
sed:在 /home/user/foo/bar/./abc 上读取错误:是一个目录
显然 sed 不会将管道参数视为我想要的字符串,例如
some_text/a
some_text/b
...
some_text/abcd
最好使用
find
's-printf
选项删除路径:要修复您的
sed
版本,请不要使用xargs
,只需直接通过管道发送到sed
喜欢 @choroba 评论的 alrady。find
您可以将输出直接通过管道输出到sed
(noxarg
)-print
是默认操作,因此可以省略它由于您想从文件名字符串中删除路径,您可以使用
-prinf
选项 fromfind
并将其格式化为-printf '%P\n'
(参见man 3 printf
)您还可以使用
awk
以下内容替换所有/
内容some_text
: