BUWに「rm -rf /」を実行すると……

UNIX/Linuxでは遊びでも実行してはいけないコマンドがある。それが「rm -rf /」だ。ファイルやディレクトリ(フォルダー)を削除するrmコマンドに、"再帰的"を意味するオプション「-r」、"強制"を意味するオプション「-f」。そして対象としてルートディレクトリを指している。つまり、「ルートディレクトリからすべてのファイルやディレクトリを削除する」というものだ。多くのrmコマンドは、ルートディレクトリーを削除対象としない「--preserve-root」が有効になっているため、上記コマンドを実行してもコマンドが実行されることはない。強制的に実行するにはオプション「--no-preserve-root」が必要だ。

Ubutsu 16.04 LTS上のBashで「rm -rf /」を実行しても警告メッセージが現れ、コマンドを実行できない

興味深いのはBUW(Bash on Ubuntu on Windows)上での動作ではないだろうか。結論から述べれば、決して実行してはいけない。一見すると「アクセス制限で削除できないファイルばかりだから安全」「WSL(Windows Subsystem for Linux)上のファイルシステムはイメージだから……」と誤った考えをお持ちだろう。だが、BUWから見るルートディレクトリはCドライブを「/mnt/c」として含んでいるため、Cドライブの内容も大半が削除されてしまう。

Windows 10 Pro バージョン1607上で「sudo rm -rf --no-preserve-root /」を実行した

コマンド終了後はデスクトップフォルダーなどもキレイに削除されたものの、PCを再起動すると意外にも問題なく起動した。ユーザーフォルダー内で削除されたデスクトップなどのフォルダーも自動復元される(もちろん中身は空だ)。しかし、スタートメニューやアクションセンターは応答しなくなり、実質的にWindows 10の「設定」から初期状態に戻す必要があるだろう(設定の起動は確認した)。もちろんオプション「--no-preserve-root」を付けていると同時に、マウント構造を頭に思い浮かべれば当たり前の結果である。繰り返し述べるが、「rm -rf /」はBUWでも実行してはいけない。

コマンド実行中の1シーン。背景画像などは削除できるらしく途中で消えてしまった。また、OneDriveフォルダーのルートは削除できずにトースト通知が示された

BashでExcelブックをPDFファイルに変換する

さて、Excel 2016はPDF出力機能を備えている。さらに述べればWindows 10はPDF出力を可能にする仮想プリンタードライバーを単独で用意しているため、電子ドキュメントに関する処理は決して難しくない。だが、大量のExcelブックを個別に変換するのは一苦労だ。

Excelからファイルを保存する際にPDF形式を選択すれば、そのまま変換できる

Windows 10の仮想プリンター「Microsoft Print to PDF」を使えば、印刷イメージのままPDFを作成できる

そこで作成したのが今回のシェルスクリプトである。いつもどおりお使いの環境に合わせて変数の値を変更し、シェルスクリプトに実行権限を与えてからお試し頂きたい。なお、今回のシェルスクリプト実行にはパッケージ「libreoffice」が必要なため、「sudo apt-get install libreoffice」と実行して同パッケージをインストールしてほしい。

 #!/bin/bash

 BaseDir=/mnt/c/Users/kaz/Desktop
 FileDir=$BaseDir/Test

 cd $FileDir
 for File in $(ls *.xlsx); do
    libreoffice --headless --nologo --convert-to pdf $File
 done

ご覧のとおり極めてシンプルなシェルスクリプトである。今回インストールした「LibreOffice」はOSS(オープンソースソフトウェア)のOpenOffice.orgから派生したオフィススイートだ。Linuxディストリビューションの多くがGUI環境で使用するオフィススイートとして採用しているが、コマンドラインオプションを組み合わせることで変換ツールとして利用できる。

ご覧のとおり処理の中核は8行目。事実上のワンライナーシェルスクリプト(1行で書けるシェルスクリプト)だ。xargsコマンドを組み合わせればワイルドカードを引数として与えられるため、1行で書ける内容である。だが、本連載はコマンドラインの操作に不慣れなWindows利用者を対象にしているため、シェルスクリプトの形式を取った。

シェルスクリプトの実行結果。元となるExcelブックファイルと同じファイル名を持つPDFファイルが生成された

なお、今回はExcelファイルを対象としているが、Word文書ファイル(拡張子「.doc」「.docx」)や、PowerPointプレゼンテーションファイル(拡張子「.ppt」「.pptx」)にも対応している。OfficeとLibreOfficeの互換性問題から、部分的にデータが欠落することもあるが、この辺りは目をつぶるほかない。

PDFファイルを開くと、フォントの関係から文字化けしている部分も各所に見受けられる

阿久津良和(Cactus)