💻
条件に合うファイル/ディレクトリを一括で操作・圧縮するコマンド
コピペで使えるコマンドを羅列しています。使用しているコマンドの解説をしているのでそれを参考に修正を行うと良いかと思います。
ディレクトリの移動
- カレントディレクトリの3階層下にあるディレクトリを検索
- 検索したものをカレントディレクトリに移動する
find ./*/*/* -type d -print0 | xargs -0 -J% mv % ./
圧縮
- ディレクトリを個別に圧縮
- 元のファイルは消去
find . -type d -print0 -exec rar a {} {}.rar {} \; -exec rm -r {} \;
Tips.1 rar
winrarをコマンドラインから使える。macはbrew
でインストール可能。
rar a [圧縮したいファイルorディレクトリ] output.rar
Tips.2 圧縮方式
- zip
- rar
zipよりもrarの方が圧縮効率が優れる
動画エンコード
- ffmpegでディレクトリ下の
mkv
ファイルをmp4
(H.265)にエンコード - 元ファイルの拡張子だけ変えて出力する(
movie.mkv
→movie.mp4
) - 元のファイルは消去
find . -name '*.mkv' -print0 -exec bash -c 'ffmpeg -i "$0" -c:v libx265 -c:a aac -tag:v hvc1 -y "${0/mkv/mp4}"' {} \; -exec rm {} \;
ffmpegではファイルにスペースが場合、なぜか別々のファイルとして認識されてしまう。それを避ける方法としてbashの-cオプションを使う方法が紹介されていた。試したところ期待通りの挙動となった。
Tips.1 ビデオコーデックについて
- libx264(H.264)
- libx265(H.265)
H265はH264の半分以下に収まる(すごい)が、エンコードに相当の時間がかかる。両者をより詳しく比較している記事を発見したのでリンクを貼っておく。
Tips.2 音声コーデックについて
- mp3
- aac
mp3は互換性に優れる一方で、aacは圧縮率・音質共に優れる
補足: Findコマンド
オプションを渡してフィルタをかけることができる。find
に似たコマンドとして、ファイルの中身に対してフィルタをかけるgrep
がある。
- ファイル名で検索/パターンマッチ(-name)
- 対象をファイルまたはディレクトリに絞る(-type)
- スペースを区切り文字として使わない(-print0)
該当するファイル及びディレクトリに対して処理をかける方法
2種類の方法がある。
- findで使える、
-exec
オプションを使う -
xargs
にパイプで渡す
基本的にxargs
の方が性能に優れる。理由としては-exec
は該当のファイル/ディレクトリに対し1つ1つ逐次的に処理を行うことしかできないが、xargs
は一括で並列的に処理を行うことが可能。また、書き方もシンプル。
xargs
find ... | xargs [行う処理]
-
-0
スペースを区切り文字として扱わないようにする。ファイル名にスペースがある場合、これをつけないと思い通りの挙動にならない
-
-J
(-I
)
受け取った引数を任意の場所で渡すことができる。-J
は一括で渡すのに対して、-I
は個別に渡す。用途に応じて使い分ける。
参考リンク
Discussion