我必须在 bash 脚本中递归查找。由于我可以从任何地方调用 bash 脚本,因此我被迫使用绝对路径。有时绝对路径可能会变得很长,并且输出变得很乏味,如下所示:
#!/usr/bin/env bash
find /long/absolute/path -type f | sort
所以我做了:
#!/usr/bin/env bash
find /long/absolute/path -type f | xargs -L 1 -I @ echo $(basename @) | sort
但这并没有给出基本名称。你能找出我错在哪里吗?
答案1
你在两个方面犯了错误:
您正在传递半任意文件
find
名二管道 - 到xargs
,然后到sort
。如果可以的话,使用-print0
以null 结尾的find
,或者将操作嵌入其中-exec
,正如莫林劳恩斯所证明的那样。如果如果您的文件名中不包含任何来自 的字符
$IFS
,您的命令仍会失败,因为您要求xargs
使用命令替换来执行 echo;该命令替换要求basename
输出 的基本名称@
,而该名称可能不存在。更接近的应该是:find /long/absolute/path -type f | xargs -L 1 -I @ basename @ | sort
...因为这将允许xargs
将文件名作为参数插入到basename
.
答案2
这对我有用:
find /some/long/path/ -type f -exec basename {} \;| sort