おすすめアイテムをいくつか紹介

広告ブロックがONになっていると表示されないことがあります。



【ファイル作ったはずなのに?】No such file or directoryの対処法

No such file or directory」というエラーは、ターミナルやLinuxでのコマンド操作時によく見かける汎用的なエラーではないでしょうか。

今回は「No such file or directory」に出会ったときに考えるべき視点を超・初心者目線でまとめてみました。

ユノミン

本記事の内容は超・初心者向けのハックになります。
黒いコマンド画面に慣れない!わからない!難しい!という方の参考になると嬉しいです。

つまるところこれ、なんて言ってるの?

今回はFFmpeg(エフエフエムペグ)というプログラムをコマンド実行した際のケースを想定してお話しします。

実行したコマンドは下記とします。.movファイルを.gifファイルに変換するものです。

ffmpeg -i conversion-mov-to-gif007.mov -r 24 conversion-mov-to-gif007.gif

そして、冒頭のエラーが出力されているとします。

conversion-mov-to-gif007.mov: No such file or directory

こちらのエラーは「conversion-mov-to-gif007.movなんてファイルはこのディレクトリにないよ」って言ってます。

え、おかしいな。さっき作ったはずだが?と思った方は、黒い画面でのコマンド実行における落とし穴にハマっているかもしれません。

そのため黒い画面にて「自分の居場所」「ファイルの居場所」を確認して理解を深めてみましょう。

対処するために確認したい2種類の「居場所」

それではひとつずつ「居場所」について確認していきます。

「自分の居場所」を確認する

自分の居場所はpwdコマンドで知ることができます。

上記がコマンド実行結果です。
今回の場合は自分のユーザーフォルダ直下が「自分の居場所」です。

「ファイルの居場所」を確認する

ファイルの居場所はmdfindコマンドを使って探すことができます。
今回の場合は下記コマンドを実行して見つけます。

mdfind -name conversion-mov-to-gif007.mov

上記がコマンド実行結果です。
ファイルの居場所は、ユーザーフォルダからさらに下のtestフォルダにあることがわかりました。

それぞれの居場所がわかると、なにがわかるの?

結論から申し上げますと、ターミナルでのコマンド実行時は「ターミナル目線で見た自分の居場所」「ターミナルの自分の居場所から見えるファイルの場所」の位置関係が大事になります。

まず、上記2点のコマンド実行結果をとりまとめてみましょう。

  • 「自分の居場所」はここ
    • /Users/●●/
  • 「ファイルの居場所」はここ
    • /Users/●●/test/

次に、実行したいコマンドをおさらいします。

ffmpeg -i conversion-mov-to-gif007.mov -r 24 conversion-mov-to-gif007.gif

FFmpegを使って動画ファイルをgifファイルに変換するコマンドですね。そして、元の動画ファイルは既に作成済みの状態です。

では先ほど判明した居場所の情報をこのコマンド実行時の状態に当てはめます。

このとき、このコマンドは/Users/●●/で実行していることになります。

しかし先ほど判明したように、gifに変換したいファイルは/Users/●●/test/にあります。

この場合、コマンドの実行場所からは「conversion-mov-to-gif007.mov」というファイルを見つけることはできません。
何故なら、コマンドの実行場所とファイルの存在場所が異なるからです。

ユノミン

ちょっと下のフォルダくらい探してくれよ!って思うかもしれません。
が、これが制約なのです。

コマンド実行時の「自分の居場所」とコマンドで使用する「ファイルの居場所」は揃えよう

先ほど判明したように、コマンドの実行場所とファイルの存在場所が異なるとファイルが見つからずにエラーとなります。

なので、コマンド実行時の「自分の居場所」とコマンドで使用する「ファイルの居場所」揃えて実行することが必要になります。

最後に、「居場所の揃え方」を2種類ご紹介します。いずれかお好きな方で試してみてください。

①「自分の居場所」を「ファイルの居場所」に寄せる

cdコマンドを使うことで、「自分の居場所」を移動することができます。

cd ファイルの居場所
cdコマンド実行の様子です。

この状態であることで、下記コマンドを実行しても「自分の居場所」と「ファイルの居場所」が同一であるため、問題なくgif変換が完了します。

ffmpeg -i conversion-mov-to-gif007.mov -r 24 conversion-mov-to-gif007.gif
②コマンド実行時に「ファイルの居場所」を明示する

コマンド内で使用するファイルを絶対パスで正確に明記することで、「自分の居場所」がどこであろうが問題なく実行することができます。

この場合のコマンドは、下記の内容に変わります。

ffmpeg -i /Users/●●/test/conversion-mov-to-gif007.mov -r 24 /Users/●●/test/conversion-mov-to-gif007.gif