ブログ

patchコマンドで「そのようなファイルやディレクトリはありません」と言われる

at_takuya.sasaki
2015年3月1日 21時30分

Armadilloのカーネルソースにパッチを当てるときにpatchコマンドを使うが、なぜか「そのようなファイルやディレクトリはありません」といわれることがある。

atmark@atde5:~/work840/atmark-dist/linux-3.x$ patch -p1 < ../../hoge.patch
bash: ../../hoge.patch: そのようなファイルやディレクトリはありません

ファイルはちゃんと~/work840に存在しているし、そもそも[../../hoge.patch]はTABキーによるファイル名補完で出てきたファイル名。

これはpatchを実行しているのがシンボリックリンクで指定されているディレクトリだからのよう。 linux-3.xはシンボリックリンクで、実際には一つ上のlinux-3.4-at4である。

atmark@atde5:~/work840/atmark-dist$ ls -la linux-3.x
lrwxrwxrwx 1 atmark atmark 16 8月 12 19:05 linux-3.x -> ../linux-3.4-at4

なので物理的には以下のディレクトリにいることになる。

atmark@atde5:~/work840/atmark-dist/linux-3.x$ pwd -P
/home/atmark/work840/linux-3.4-at4

*pwdの-Pは--physicalの略で、すべてのシンボリックリンクをたどる。

なので、物理的にどのディレクトリにいるかを考慮して、以下のように実行すれば成功します。

atmark@atde5:~/work840/atmark-dist/linux-3.x$ patch -p1 < ../hoge.patch

以上