よりエレガントな方法!
記事を書いた後に @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 も一緒に消えてしまいます。それはそれで面白い。