![1行だけを含むファイルを削除しますか? [コピー]](https://linux33.com/image/11121/1%E8%A1%8C%E3%81%A0%E3%81%91%E3%82%92%E5%90%AB%E3%82%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
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' {} +
特にスクリプトファイルの削除をテストする場合は、データをバックアップする必要があります。