1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ファイルサイズが 0 のファイルを削除するワンライナー

Last updated at Posted at 2022-10-16

よりエレガントな方法!

記事を書いた後に @ko1nksm さんよりコメントをいただきました。

find . -size 0 -delete

これでOK!

以下は余計に手間がかかっている解法です。

無駄な作業!

録画失敗でサイズゼロのファイルができたので整理。

# ls -al | awk '$5==0 {print $0}'
-rw-r--r-- 1 root     video              0  9月  9 00:02 2022年09月08日23時30分00秒-アニメ Shenmue the Animation 第10話 廻天(かいてん).mp4
-rw-r--r-- 1 root     video              0  9月  9 20:01 2022年09月09日19時30分00秒-機動戦士ガンダム 鉄血のオルフェンズ 第11話「ヒューマン・デブリ」.mp4
-rw-r--r-- 1 root     video              0  9月 10 02:27 2022年09月10日01時55分00秒-惑星のさみだれ ♯10「ヘカトンバイオンと獣の騎士団」【アニメイズム】[字] .mp4
-rw-r--r-- 1 root     video              0 10月  8 05:07 2022年10月08日01時00分00秒-アイドルマスター シンデレラガールズ 第1話「Who is in the pumpkin carriage?」.mp4

ここで注意するべきは、ファイル名に半角スペースが入っているのがある。

環境

# cat /etc/issue
Ubuntu 20.04.4 LTS \n \l

step-to-step

まずは、ファイルサイズがゼロのファイル名をリストアップ。find でやってもいいけど今回は awk で。


# ls -al | awk '$5==0 {print $9}' 
2022年09月08日23時30分00秒-アニメ Shenmue
2022年09月09日19時30分00秒-機動戦士ガンダム
2022年09月10日01時55分00秒-惑星のさみだれ ♯10「ヘカトンバイオンと獣の騎士団」【アニメイズム】[字]
2022年10月08日01時00分00秒-アイドルマスター

ファイル名がスペースで切れてしまってますね。
なので、ファイル名をダブルクォートで囲んだものを入力として、一度スペース区切りでサイズゼロを抽出します。


# ls -alQ | awk '$5==0 {print $0}' 
-rw-r--r-- 1 root     video              0  9月  9 00:02 "2022年09月08日23時30分00秒-アニメ Shenmue the Animation 第10話 廻天(かいてん).mp4"
-rw-r--r-- 1 root     video              0  9月  9 20:01 "2022年09月09日19時30分00秒-機動戦士ガンダム 鉄血のオルフェンズ 第11話「ヒューマン・デブリ」.mp4"
-rw-r--r-- 1 root     video              0  9月 10 02:27 "2022年09月10日01時55分00秒-惑星のさみだれ ♯10「ヘカトンバイオンと獣の騎士団」【アニメイズム】[字] .mp4"
-rw-r--r-- 1 root     video              0 10月  8 05:07 "2022年10月08日01時00分00秒-アイドルマスター シンデレラガールズ 第1話「Who is in the pumpkin carriage?」.mp4"

ここから、もう一度 AWK をかけてファイル名だけを取り出します。

# ls -alQ | awk '$5==0 {print $0}' | awk -F\" '{print $2}'
2022年09月08日23時30分00秒-アニメ Shenmue the Animation 第10話 廻天(かいてん).mp4
2022年09月09日19時30分00秒-機動戦士ガンダム 鉄血のオルフェンズ 第11話「ヒューマン・デブリ」.mp4
2022年09月10日01時55分00秒-惑星のさみだれ ♯10「ヘカトンバイオンと獣の騎士団」【アニメイズム】[字] .mp4
2022年10月08日01時00分00秒-アイドルマスター シンデレラガールズ 第1話「Who is in the pumpkin carriage?」.mp4

本番

うまくできたので、これを使ってシェルコマンドリストを作ります。

# ls -alQ | awk '$5==0 {print $0}' | awk -F\" '{print "rm \""$2"\""}'  
rm "2022年09月08日23時30分00秒-アニメ Shenmue the Animation 第10話 廻天(かいてん).mp4"
rm "2022年09月09日19時30分00秒-機動戦士ガンダム 鉄血のオルフェンズ 第11話「ヒューマン・デブリ」.mp4"
rm "2022年09月10日01時55分00秒-惑星のさみだれ ♯10「ヘカトンバイオンと獣の騎士団」【アニメイズム】[字] .mp4"
rm "2022年10月08日01時00分00秒-アイドルマスター シンデレラガールズ 第1話「Who is in the pumpkin carriage?」.mp4"

削除系になるのでスクリプトから削除を実行するのではなく、一度ファイルに落とします。

# ls -alQ | awk '$5==0 {print $0}' | awk -F\" '{print "rm \""$2"\""}'  > rmsizezero.sh

削除実行

中身確認して問題なければ実行します。

# bash rmsizezero.sh

消えたかどうか確認

# ls -alQ | awk '$5==0 {print $0}' | awk -F\" '{print $0}'
# 

うまくいったみたいです。

課題

ファイル名をダブルクォートで囲って、半角スペースなどのエラーを回避していますが、ファイル名にダブルクォートが入っていたらうまくいきません。問題文字をエスケープする方法がより良いでしょう。

おまけ

今回、rmsizezero.sh も一緒に消えてしまいます。それはそれで面白い。

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?