今日はちょっとした小技を紹介。
タイトルの通り「特定のフォルダ内の複数のサブフォルダ内のファイルを一括削除する」方法。
つまりやりたいことは、このように一つのフォルダに小さいフォルダが入っており、
さらにその中にいろいろなファイル(Excelとかpdfとか)が入っているというよくある状態だ。
今回のフォルダ構造をわかりやすくした
やりたいことを図にするとこのような感じ。
大本のフォルダ(例えば「出勤簿」) ↓ サブフォルダ(例えば「山田さんの出勤簿」、「佐藤さんの出勤簿」…) ↓ ファイル(例えば「山田さん202106出勤簿.xlsx」)
手で削除しようとするとかなり面倒くさくて、
出勤簿→山田さんの出勤簿→山田さん202106出勤簿.xlsxを直接削除する必要がある。
最近だとRPAという自動化ソフトがあるのでこうした処理も自動化可能だけれど、
さすがにこのくらいのアプリであればシェルと呼ばれる簡単なコードを書くだけで済んだりする。
調べると利用率の高いWindowsでVBAやシェルを書いたdatを使った方法はよくある。
Macのようなユーザーの少ないマシンでは説明が少なかったので参考になればと思う。
例【Windows 10対応】delコマンドで特定のファイル名やパターンに一致するファイルをまとめて削除する
https://www.atmarkit.co.jp/ait/articles/1701/23/news024.html
複数のフォルダ内のファイル削除方法の説明
まず、これまで普通のやり方は「ファイルを右クリックして削除」をしていたと思う。
しかし、あまりにたくさんのフォルダに同じようにマウスで処理をするとものすごく面倒くさい。
今回はWindowsでいうコマンドプロンプトであるMacのターミナルを使ってやってみよう。
基本的にはコピペをするか、真似をするだけで同じように削除できるはずだし、
少し応用すればいろいろな拡張子を持つファイルを一気に、簡単に削除することができる。
その1:そのフォルダのある場所をターミナルで開く
まず、今回のような手続きの自動化を行うのはプログラムの得意分野である。
Macであれば実は誰でもRPAソフトウェアである「Automator」が入っている。(驚き)
しかし、今回は単に一括削除をするためのアプリケーションということなので、
ちょっとだけコードをコピペするだけでもできるようする。
そこで、まずは「ターミナル」というソフトを起動してほしい。
このターミナルというソフトはMacになら必ず入っている、黒い画面である。
Macならキーボードの上の方にある「F4」と書かれている□が6つ並んだキーを押す。
出てきたアプリ一覧画面の検索窓に「ターミナル」と打ち、Returnを押す。
この黒い画面はプログラマの象徴のようなもので、実は一番ここが精神的ハードルが高い。
自動化を行うにはどうしてもターミナルという使い慣れない黒い画面が必要だ。
今回は苦手意識を持ってもらわないようにコーディングは最低限にした上で説明する。
さあ、まずはターミナルを開いてみる。
下の画像のような画面がでたら「cd」と打つ、その後に半角スペースを空ける。
次にファイルの場所を指定してあげよう。
今回はドラッグ・アンド・ドロップで行う。
まずは、Finderでその削除したいファイルが入っているサブフォルダが入っている、
大本のフォルダのある場所を表示する(回りくどいがとにかく大本のフォルダである)。
例えば今回はデスクトップにある「202105」であるとする。
これをドラッグ・アンド・ドロップでさきほどのターミナルのcd の後ろに放り込む。
別にこれはDropbox(ローカル)の中においてあっても同じようにできる。
上の画像のようにそのフォルダがある場所が白く表示されている。
ターミナル上で「Return」を押せば、ターミナル上から202105フォルダに移動ができる。
上の画像のように「自分のマシン名 202105」という感じにフォルダ名が表示されていればOK
この「移動」という処理はターミナルでは結構使う。Linuxでも同じように使える。
% cd ファイルの場所
よくある勘違いにブログやプログラム教本のコードいきなり打っても動くとか、
どの場所からでもコードを打てばそのように処理されると思っているということがある。
パソコンは普段皆が思っているよりは厳密な動作を求めるので、
ちゃんと「どこで何を実行する」かは指定する必要がある。
今回はあくまで「202105」で実行するという体で説明しているということである。
さらに言えば自動化も対象となるファイルをちゃんと定義しておかないと、
間違ってすべてのパソコン上のファイルが一気に削除されることだって起こりかねない。
だから必ず特定の対象となるフォルダに「移動」しておく必要がある。
それを確認する方法が「自分のマシン名 対象フォルダ名」が表示されていることである。
その2:削除したいファイル形式を指定して以下のコマンドを打つ
さあ、その削除したいファイルがあるフォルダまで移動できただろうか?
これは何度もいうが必ず確認してほしい。
さあ、次に実際に削除するコマンドを叩く(入力する)。
例えばxlsx(Excelの新しいファイル形式)を削除するなら、
以下のコマンドをコピペしてエンターを押すだけで良い。
% find ./ -name "*.xlsx" -exec rm {} \;
なお、%はコピーしないでfindから後ろをコピペする。これはコードを書く際のお作法みたいなもの。
この場合は.xlsxという拡張子のついているファイル形式だけを削除できただろう。
それでは応用編としてpdfファイル形式だけを削除するにはどうするだろうか?
% find ./ -name "*.pdf" -exec rm {} \;
そう、このようなコードで良い。
おなじようにWordファイルなら.docxになるだろうし、.jpgもできる。
一度覚えておけばいちいちサブフォルダ内のファイルを右クリックで削除する必要はない。
しかし、一行ですべてのファイルを削除できるということは楽もできるが、
簡単にすべてのファイルを削除できてしまうという怖いことでもある。
このような自動化を行うときはくれぐれも注意して実行しなければならない。
ということで、今回はMacユーザーを対象に(Linuxでももちろん使えるがニーズがない)
たくさんのサブフォルダ内の特定のファイル形式のファイルを一括削除する方法をお伝えしました。