プログラミングの授業で発生したちょっとしたトラブルと、そこから始まったLinuxコマンドの試行錯誤(Retry)の記録を、いくつかのシリーズに分けてお届けします。
今回はその第1回。事の発端と、Windowsの常識がLinuxではすんなり通用しなかったという「失敗体験」についてです。
提出物は「.ipynb」を受け付けてくれない
授業ではPythonを教えており、学生にはJupyter Notebook形式(拡張子 .ipynb)で課題を作成してもらっています。
いざMicrosoft Formsで課題ファイルを回収しようとしたところ、さっそく問題が発生しました。Formsのファイルアップロード機能では、セキュリティ上の理由なのか、.ipynb ファイルを直接アップロードさせることができない仕様になっていたのです。
そこで取った苦肉の策が、「提出前に、自分のパソコンで拡張子を .pdf に変更してからアップロードしてね」という力技でした。学生にはひと手間かけさせましたが、これで無事に全員のファイルを回収することができました。
Windowsなら「ren」コマンドで一発解決
さて、手元には大量の「中身はPythonコードだけど、名前はPDF」というファイルが集まりました。これを教員側で一括で元の .ipynb に戻す必要があります。
私が普段使っているWindows環境であれば、コマンドプロンプトを開いてこの一行を打つだけで終わります。
ren *.pdf *.ipynb
これだけで、一瞬にして数百のファイルが元の姿に戻りました。本当に便利です。実務としてはこれで無事完了したのですが、ふとこんな疑問が湧きました。
「これを、授業で使っているLinux環境でやろうとしたら、どうなるんだろう?」
意気揚々と叩いた「mv」コマンドの敗北
Linuxでファイル名を変更するコマンドといえば mv です。Windowsの ren と同じ感覚で、意気揚々とターミナルにこう打ち込みました。
mv *.pdf *.ipynb
しかし、結果は非情なエラーメッセージでした。
mv: target '*.ipynb' is not a directory (対象の ‘*.ipynb’ はディレクトリではありません)
「えっ、なんで?」というのが最初の感想でした。Windowsではあんなに簡単に一発でできたことが、なぜLinuxの基本コマンドである mv ではエラーになってしまうのか。ファイル名を一括で変更したいだけなのに、なぜ「ディレクトリじゃない」と怒られなければならないのか。
次回予告:なぜエラーになったのか?
Windowsの常識のままLinuxを触ると、こうした思わぬ壁にぶつかります。
「Linuxで一括リネームをするには、どうやら一筋縄ではいかないらしい」ということが分かったところで、今回はここまで。
次回は、なぜ一番有名な mv コマンドが失敗してしまったのか、Linuxの「シェル」が裏側でやっているお節介(?)な仕組みについて探求し、別の方法でのRetryに挑みます。

コメント