Macos 在shell脚本中引用一个文件名;对于每一个“;块

Macos 在shell脚本中引用一个文件名;对于每一个“;块,macos,bash,shell,sh,Macos,Bash,Shell,Sh,我有一个任务,我想增加更多的自动化。基本上,我将有一个目录,其中包含以字母x开头的不同数量的文件。我想在每个文件上运行一个脚本,然后将文件移动到“已完成”文件夹中 我只想遍历文件名的起始字符为“x”的文件,然后在另一个位置使用该文件名作为输出文件名的一部分 大致如下: for each (files beginning with x) cat (filename) | xargs ./script.sh > result-(filename); mv (filename) comp

我有一个任务,我想增加更多的自动化。基本上,我将有一个目录,其中包含以字母x开头的不同数量的文件。我想在每个文件上运行一个脚本,然后将文件移动到“已完成”文件夹中

我只想遍历文件名的起始字符为“x”的文件,然后在另一个位置使用该文件名作为输出文件名的一部分

大致如下:

for each (files beginning with x)
  cat (filename) | xargs ./script.sh > result-(filename);
  mv (filename) complete/;
  mv result-(filename) complete/;
end for each
每次出现这个问题时,我都会手动扩展一个shell脚本,并将其大小精确到我有多少个文件,但我确信我所问的是可能的;做
for f in x*; do
  xargs ./script.sh <"$f" >"result-$f"
  mv "$f" result-"$f" complete
done
xargs./script.sh“结果-$f” mv“$f”结果-“$f”完成 完成 注意事项:

  • cat
    是“连接”的缩写。如果您没有连接多个文件,或未经修改将单个文件的输出显示到屏幕上,它可能不是适合这项工作的工具:直接将文件连接到所需工具的输入比启动一个只读取单个文件并将该程序的stdout连接到下一个程序的stdin的额外程序要高效得多

    换言之:
    表示x*中的f;做
    xargs./script.sh“结果-$f”
    mv“$f”结果-“$f”完成
    完成
    
    注意事项:

    • cat
      是“连接”的缩写。如果您没有连接多个文件,或未经修改将单个文件的输出显示到屏幕上,它可能不是适合这项工作的工具:直接将文件连接到所需工具的输入比启动一个只读取单个文件并将该程序的stdout连接到下一个程序的stdin的额外程序要高效得多


      换言之:
      StackOverflow不是“请为我写脚本”请求的论坛。请考虑从语言教程开始,即,你有<代码>(文件从x开始)< /C> >使用<代码> x*< /代码>。至于for循环的语法,请参阅StackOverflow不是“请为我写脚本”请求的论坛。请考虑从语言教程开始,即,你有<代码>(文件从x开始)< /C> >使用<代码> x*< /代码>。关于for循环的语法,请参见感谢您提供的详细答案!我欣赏:)顺便说一下,如果你使用GNU版本(和一个shell,比如支持扩展语法的BASH),请考虑<代码> -d $ '\n′/c>参数到xARG。否则,带有空格的行将导致多次调用,引号将不会被逐字处理,等等。结果文件可以直接生成到
      complete
      目录中,因此您不必单独移动它。很高兴知道。在这种情况下,任何行都不会包含空格或特殊字符,但我会记住这一点,以备将来使用。@tripleee,但当它们尚未真正完成时(命令仍在运行),将在
      complete
      中完成它们。感谢您提供详细的答案!我欣赏:)顺便说一下,如果你使用GNU版本(和一个shell,比如支持扩展语法的BASH),请考虑<代码> -d $ '\n′/c>参数到xARG。否则,带有空格的行将导致多次调用,引号将不会被逐字处理,等等。结果文件可以直接生成到
      complete
      目录中,因此您不必单独移动它。很高兴知道。在这种情况下,任何行都不会包含空格或特殊字符,但我会记住这一点,以备将来使用。@tripleee,但当它们还没有真正完成时(命令仍在运行),它们将在
      complete
      中完成。