批处理许多文件

批处理许多文件

我有许多单独的列表,其中所有包含“@”作为开头的行都是需要的。我现在正在用来sh list_of_commands处理文件。我想知道是否有更聪明的方法来完成这项工作。

1)如何在不将所有命令行一一写入的情况下批量处理所有文件?

2)是否有通过在输入文件名称中添加后缀来命名输出文件的方法?

非常感谢!

答案1

以下脚本会爬取执行脚本的目录中的所有文件,并将命令一一应用到其中。那是你想要的东西吗?

#! /bin/sh
for file in *
do
   if [[ -f "$file"  ]]; then
      # process the file with name in "$file" here
   fi
done

您可以通过在上述循环中使用以下语句来根据请求执行文件重命名:

mv "$file"  "$(echo" $file" | sed -n "s|^\(.*\)\(\.[0-9a-zA-Z]*\)$|\1_su\2|p")"

它将后缀“_su”放在文件扩展名后缀前面但位于文件名末尾。如果文件没有扩展名,则会将后缀放在文件名的末尾。

答案2

  1. 收集脚本中的命令(见下文)
  2. 将后缀附加到脚本命令行上给定的文件名,并将其用作输出文件名。
#!/bin/sh

for name in "$@"; do
    some_utility "$name" >"$name.suffix"
done

"$@"将扩展到命令行上所引用的内容列表。例如,与

$ ./script.sh a b "hello world" 123

该变量将在循环的连续迭代中$name获取值abhello world和。123您可以通过这种方式传递您的输入文件,或者像

$ ./script.sh input*.txt

这将给出当前目录中与给定模式匹配的所有文件。

然后,该变量$name可以用作每个输入文件的名称,并且您可以通过简单地将其标记到该值的末尾来添加后缀(例如,将其用作输出文件的名称)。

将循环内的行替换为实际处理文件的行$name

该脚本必须可执行才能与./script.sh.你用 来执行此操作chmod +x script.sh

相关内容