循环将命令应用于目录中的 300 个文件,并重命名输出,包括原始输入文件名和新文本

循环将命令应用于目录中的 300 个文件,并重命名输出,包括原始输入文件名和新文本

我有一个代码是 svr_vars。我有一个包含 300 个不同文件的目录。我想循环它并在目录中的每个文件上运行代码。 svr_vars 代码输出通用文件名 svr_vars.txt。因此,每次运行代码时,它都会覆盖 svr_vars.txt 文件名。因此,每次运行代码后都需要重命名。

1995051200_72259.txt <= 目录中的一个文件是什么样子

我希望输出从 svr_vars.txt 重命名为 svr.1995051200_72259.txt

答案1

如果我正确理解了这个问题,那么你基本上就是这样做的

svr_vars 1995051200_72259.txt

并且程序生成名为的输出svr_vars.txt,您希望将其重命名为svr.1995051200_72259.txt

假设所有 300 个文件都以数字开头并以数字结尾,.txt那么您可以执行类似于以下的循环

#!/bin/bash
for file in [1-9]*.txt
do
  svr_vars "$file"
  mv svr_vars.txt "svr.$file"
done

我们可以向此循环添加一些健全性检查,以使其在无法正常工作时中止。例如

#!/bin/bash
for file in [1-9]*.txt
do
  if [ -e "svr.$file" ]
  then
    echo "$file already processed.  skipping"
  else
    svr_vars "$file"
    if [ ! -e svr_vars.txt ]
    then
      echo "Failed to create results for $file"
    else
      mv svr_vars.txt "svr.$file"
    fi
  fi
done

相关内容