删除空文件和仅标题:

删除空文件和仅标题:

在后续问题中昨天提出的问题

我正在 Datastage ETL 工具中运行以下命令,该工具在 Linux 中执行脚本。

我执行了:

for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=0

在这种情况下,我的文件夹中有空文件:

for file in /Path/filename_*; do [[ $(wc -l "$file" | cut -d' ' -f1) -eq 1 ]] && rm $file ; done
Reply=1

我的文件夹里没有空文件。

两者都是相同的命令,但有不同的回复,如果我收到回复代码 1,我的工作就会失败

答案1

为了避免 留下非零状态[[,您可以使用if语句而不是&&运算符:

if [[ $(wc -l <"$file") -eq 1 ]]; then
  echo rm -- "$file"
fi

您可能只需要读取第二行,而不是计算所有行:

for file in /Path/filename_*; do
  [ -f "$file" ] || continue
  {
    read _
    read _ || echo rm -- "$file"
  } <"$file"
done

如果第二行read失败,则没有第二行(根据 POSIX)。

相关内容