在 bashscript 中使用绝对路径查找 | xargs 基本名称

在 bashscript 中使用绝对路径查找 | xargs 基本名称

我必须在 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

你在两个方面犯了错误:

  1. 您正在传递半任意文件find管道 - 到xargs,然后到sort。如果可以的话,使用-print0以null 结尾的find,或者将操作嵌入其中-exec正如莫林劳恩斯所证明的那样

  2. 如果如果您的文件名中不包含任何来自 的字符$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

相关内容