空のファイルとヘッダーのみを削除する:[閉じる]

空のファイルとヘッダーのみを削除する:[閉じる]

以降の質問で昨日受け取った質問:

Linuxでスクリプトを実行するDatastage ETLツールで、次のコマンドを実行しています。

私は以下を実行しました:

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

すべての行を計算するのではなく、2番目の行だけを読む必要があります。

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

2行目がread失敗した場合は、POSIXによると2行目はありません。

おすすめ記事