通过 shell 脚本唯一命名文件



我正在尝试制作一个 bash 脚本,该脚本通过指定的目录,查找文件,对其内容进行排序,然后创建一个新文件。 我现在遇到的唯一问题是如何为每个文件指定不同的名称。 代码:

find $1 -name '*.grd' -exec sort -k 2,2 {}> {}.std ;

当您在 find 命令中执行重定向时,shell 在启动 find 之前只执行一次重定向。由于-exec直接使用 execv() 调用来调用子调用 - 没有 shell,因此将不尊重其参数中的重定向。(诸如>file之类的重定向由调用 shell 执行,而不是由操作系统作为执行过程的一部分执行)。

对于大多数控制,不要尝试使用 find -exec ,而是直接在 shell 中处理结果:

while IFS= read -r -d '' filename; do
  sort -k2,2 <"$filename" >"${filename}.std"
done < <(find "$1" -name '*.grd' -print0)

或者,如果您坚持使用 find -exec让它自己启动一个 shell,并在那里进行处理和重定向:

find "$1" -name '*.grd' -exec bash -c 
  'while (( $# )); do sort -k2,2 <"$1" >"$1.std"; shift; done' _ {} +

其他方法可在 Wooledge wiki 的 UsingFind 页面上找到(请参阅第 5 至 8 节)。

相关内容

  • 没有找到相关文章

最新更新