1行だけを含むファイルを削除しますか? [コピー]

1行だけを含むファイルを削除しますか? [コピー]

csvフォルダに多数のファイルが保存されています。 1行を含むファイルだけを削除したいのですが、csvどうすればよいですか?

ベストアンサー1

名前付きファイルの行数をMyFile.csv渡すことができますwc -l <MyFile.csv。この数字をファイルと比較し、次を1使用してファイルを削除できます。

if [ "$( wc -l <MyFile.csv )" -eq 1 ]; then
    rm -i MyFile.csv
fi

これは$(...)コマンドの置き換えであり、その中のコマンドの出力に置き換えられます。この-iオプションを使用rmすると、ユーティリティからエントリを削除する前に確認を要求します。

これを現在のディレクトリのすべてのCSVファイルに昇格させるには、次の手順を実行します。

for filename in ./*.csv; do
    if [ "$( wc -l <"$filename" )" -eq 1 ]; then
        rm -i "$filename"
    fi
done

現在のディレクトリまたはサブディレクトリのすべてのCSVファイルに追加昇格するには、次の手順を実行します。

find . -type f -name '*.csv' -exec sh -c '
    for pathname do
        if [ "$( wc -l <"$pathname" )" -eq 1 ]; then
            rm -i "$pathname"
        fi
    done' {} +

特にスクリプトファイルの削除をテストする場合は、データをバックアップする必要があります。

おすすめ記事