bash - Basename 不适用于 xargs 占位符
问题描述
我正在尝试在管道中使用basename
实用程序,如下所示:xargs
printf
printf "%s" "$ACTUAL_FILES" | xargs -d ' ' -i printf "%s\n" "$(basename {})"
这$ACTUAL_FILES
是一个绝对文件路径数组,每个路径用空格分隔。
使用上面的代码段,我试图在每一行中打印没有路径的文件名。但是我得到的输出$ACTUAL_FILES
与新行中的每个元素相同。
我知道我们可以使用bash sub shell
and echo
with来实现这一点xargs
,但我被告知要使用printf
with xargs
。
如何使用 basename 或任何其他实用程序来获取文件名。
解决方案
您需要在处理 xargs 后剥离路径(我用小写写您的 var):
printf "%s" "${actual_files}" | xargs -d ' ' -i printf "%s\n" "{}" | sed 's#.*/##'
当您开始用换行符替换空格时,处理会更容易。
tr ' ' '\n' <<< "${actual_files}"| sed 's#.*/##'
tr
你可以避免
grep -Eo "[^/]*( |$)" <<< "${actual_files}"
推荐阅读
- javascript - 反应原生的条件显示
- javascript - ctx.fillrect 不起作用
- python - 如何将破折号应用程序保存为可执行文件以供本地机器使用
- javascript - 将多个对象与对象数组中的值总和合并并在javascript中重新排列数组
- android - Android Fragment - 隐藏永久导航栏打开 BottomSheetFrag 或始终
- c# - 是否有任何工具可以可视化 Akka.net 中的演员关系?
- jquery - (索引):583 未捕获的类型错误:无法读取未定义的属性“添加”
- c# - 如何乘以列值并按另一列分组并使用 LINQ 返回对象列表
- c# - 如何在内存中编译并使用 Microsoft.CodeAnalysis 获取程序集
- json - Newtonsoft.Json.Schema 未针对 JSON 模式正确验证 JSON 输入