1
1

More than 1 year has passed since last update.

拡張子の異なる同じファイルを削除するワンライナー

Last updated at Posted at 2022-10-16

よりいい方法!

@ko1nksm さんよりコメントを頂いて、ワンライナーではないやりかたを紹介いただきました。
そちらもご覧ください。
https://qiita.com/nanbuwks/items/7f09b7aaed9ae17c4c1e#comment-8b55ed21b6de59a66bce

以下ワンライナーの方法

録画設定を適当にやっていて、m2ts ファイルと mp4 ファイルが2つ残ってしまった。
同じファイル名のもののうち、m2ts ファイルを削除するワンライナーを作成する。

環境

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

ニーズ

録画サーバーで EPGStation を動かしている。
録画予約したものは、録画後 mp4 にトランスコーディングして、元ファイルの m2ts ファイルを削除するようになっている。
しかし録画設定をいいかげんにやっていたら m2ts ファイルが削除されていないものが沢山できてしまった。m2ts ファイルを残しておくと容量を圧迫するので削除したい。

m2ts ファイルを全部削除すればいいということではなくて・・・

# ls  2022年*.mp4 2022年*.m2ts | head
2022年08月23日21時54分00秒-Artist#18File ★今月のアーティストはDEEP YUICHIRO.m2ts
2022年08月23日22時00分00秒-国際報道2022 侵攻半年 ウクライナ市民はいま.m2ts
2022年08月23日23時00分00秒-金装のヴェルメイユ~崖っぷち魔術師は最強の厄災と魔法世界を突き進む~ #8.m2ts
2022年08月23日23時30分00秒-旅するためのフランス語(20)「今月のおさらい」.m2ts
2022年08月23日23時55分00秒-Eテレ2355 火曜日.m2ts
2022年08月23日23時55分00秒-みんなのスポーツ MLB野球&サッカー&五輪種目を深掘り!.m2ts
2022年08月23日23時55分00秒-選「鬼太郎が見た玉砕〜水木しげるの戦争〜」.m2ts
2022年08月24日00時00分00秒-<アニメギルド>継母の連れ子が元カノだった #7.m2ts
2022年08月24日00時00分00秒-アニメ 連盟空軍航空魔法音楽隊ルミナスウィッチーズ 第7話 太陽の理由.m2ts
2022年08月24日00時30分00秒-<アニメギルド>転生賢者の異世界ライフ #9.m2ts

mp4 ファイルを作成しておらず、m2ts ファイルだけしか無いものもあるのでそれは消さずに残したい。

削除ルール

  • 拡張子が .mp4 ファイルと .m2ts ファイルで同じ名前のファイルを探す
  • 該当のファイルのうち、.m2ts ファイルだけ削除する

なお、トランスコード失敗で .mp4 ファイルの容量がゼロになっているものがあるが、それは予め除外しておく。

step-by-step

まずは、mp4ファイルとm2tsファイル両方のリストから、拡張子を除外したリストを得る

# ls  2022年*.mp4 2022年*.m2ts | awk -F. '{ print $1 }'  | head
2022年08月23日21時54分00秒-Artist#18File ★今月のアーティストはDEEP YUICHIRO
2022年08月23日22時00分00秒-国際報道2022 侵攻半年 ウクライナ市民はいま
2022年08月23日23時00分00秒-金装のヴェルメイユ~崖っぷち魔術師は最強の厄災と魔法世界を突き進む~ #8
2022年08月23日23時30分00秒-旅するためのフランス語(20)「今月のおさらい」
2022年08月23日23時55分00秒-Eテレ2355 火曜日
2022年08月23日23時55分00秒-みんなのスポーツ MLB野球&サッカー&五輪種目を深掘り!
2022年08月23日23時55分00秒-選「鬼太郎が見た玉砕〜水木しげるの戦争〜」
2022年08月24日00時00分00秒-<アニメギルド>継母の連れ子が元カノだった #7
2022年08月24日00時00分00秒-アニメ 連盟空軍航空魔法音楽隊ルミナスウィッチーズ 第7話 太陽の理由
2022年08月24日00時30分00秒-<アニメギルド>転生賢者の異世界ライフ #9

なお、ドットが複数あるファイルは考慮していないのでもしそのようなものが想定される場合は要注意。

次に、.m2ts と .mp4 の2つが存在するファイル名リスト(拡張子除外)を得る


# ls  2022年*.mp4 2022年*.m2ts | awk -F. '{ print $1 }' | uniq -d | head
2022年08月25日23時30分00秒-はたらく魔王さま!! #07「魔王、銚子と世界の広さを知る」
2022年08月25日23時30分00秒-はたらく魔王さま!! #7「魔王、銚子と世界の広さを知る」[字]
2022年08月26日01時20分00秒-NHKスペシャル「ウクライナ侵攻半年 ~“プーチンの戦争”出口はどこに~」[字][再]
2022年08月27日19時00分00秒-SDガンダムワールド ヒーローズ 第22話「窮奇、襲来」
2022年08月27日19時30分00秒-機動戦士ガンダムSEED DESTINY PHASE-30「刹那の夢」
2022年08月27日23時30分00秒-レギュラー番組への道 再生できないホームビデオありませんか?6▽亡き妻から娘へ[字]
2022年08月28日00時00分00秒-アニメ てっぺんっ!!!!!!!!!!!!!!! #9「アダムスキーの章」
2022年08月28日00時00分00秒-アニメ キングダム 第4シリーズ(21)「唯一の勝機」[字]
2022年08月28日00時30分00秒-Engage Kiss #9「流す涙の意味を知らずに」
2022年08月28日00時30分00秒-アニメ 継母の連れ子が元カノだった #8

ファイル名に mv コマンドと mv 先をつけたスクリプト形式のリストを作る

# ls  2022年*.mp4 2022年*.m2ts | awk -F. '{ print $1 }' | uniq -d | awk -F. '{ print "mv \""$1".m2ts\" double"}' | head
mv "2022年08月25日23時30分00秒-はたらく魔王さま!! #07「魔王、銚子と世界の広さを知る」.m2ts" double
mv "2022年08月25日23時30分00秒-はたらく魔王さま!! #7「魔王、銚子と世界の広さを知る」[字].m2ts" double
mv "2022年08月26日01時20分00秒-NHKスペシャル「ウクライナ侵攻半年 ~“プーチンの戦争”出口はどこに~」[字][再].m2ts" double
mv "2022年08月27日19時00分00秒-SDガンダムワールド ヒーローズ 第22話「窮奇、襲来」.m2ts" double
mv "2022年08月27日19時30分00秒-機動戦士ガンダムSEED DESTINY PHASE-30「刹那の夢」.m2ts" double
mv "2022年08月27日23時30分00秒-レギュラー番組への道 再生できないホームビデオありませんか?6▽亡き妻から娘へ[字].m2ts" double
mv "2022年08月28日00時00分00秒-アニメ てっぺんっ!!!!!!!!!!!!!!! #9「アダムスキーの章」.m2ts" double
mv "2022年08月28日00時00分00秒-アニメ キングダム 第4シリーズ(21)「唯一の勝機」[字].m2ts" double
mv "2022年08月28日00時30分00秒-Engage Kiss #9「流す涙の意味を知らずに」.m2ts" double
mv "2022年08月28日00時30分00秒-アニメ 継母の連れ子が元カノだった #8.m2ts" double

スクリプトで指定しているのは、ファイル一覧を一度に削除するのではなく、一度 double フォルダに移動というようにしています。

なお、ファイル名をダブルクォートで囲んでいますが、ファイル名にダブルクォートが入っているものがあると問題が起きるので、そのようなファイル名が想定される場合は別途対応が必要でしょう。

本番

削除対象を一時的に移動するフォルダを作成します。

# mkdir double

スクリプトファイル double.sh を作成する

# ls  2022年*.mp4 2022年*.m2ts | awk -F. '{ print $1 }' | uniq -d | awk -F. '{ print "mv \""$1".m2ts\" double"}' > mvdouble.sh

スクリプトファイルを確認し、問題ないようなら実行する。

# sh mvdouble.sh

double フォルダを確認

# cd double
# ls | head
2022年08月25日23時30分00秒-はたらく魔王さま!! #07「魔王、銚子と世界の広さを知る」.m2ts
2022年08月25日23時30分00秒-はたらく魔王さま!! #7「魔王、銚子と世界の広さを知る」[字].m2ts
2022年08月26日01時20分00秒-NHKスペシャル「ウクライナ侵攻半年 ~“プーチンの戦争”出口はどこに~」[字][再].m2ts
2022年08月27日19時00分00秒-SDガンダムワールド ヒーローズ 第22話「窮奇、襲来」.m2ts
2022年08月27日19時30分00秒-機動戦士ガンダムSEED DESTINY PHASE-30「刹那の夢」.m2ts
2022年08月27日23時30分00秒-レギュラー番組への道 再生できないホームビデオありませんか?6▽亡き妻から娘へ[字].m2ts
2022年08月28日00時00分00秒-アニメ てっぺんっ!!!!!!!!!!!!!!! #9「アダムスキーの章」.m2ts
2022年08月28日00時00分00秒-アニメ キングダム 第4シリーズ(21)「唯一の勝機」[字].m2ts
2022年08月28日00時30分00秒-Engage Kiss #9「流す涙の意味を知らずに」.m2ts
2022年08月28日00時30分00秒-アニメ 継母の連れ子が元カノだった #8.m2ts
# ls | wc
    492    1131   59123
# du -h
1.6T	.

削除実行

# cd ..
# rm -rf double

応用

以下のようなことができますね!

  • ls を工夫して、別々のところにあるファイルでダブっているのを削除
  • 沢山できたバックアップファイルを整理
  • フィルターを用いて判定条件を追加したり
1
1
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
1