ディレクトリが削除できない場合に確認したいこと

.htaccessのようにピリオド(ドット)で始まる名称のファイルはftpクライアントのファイルリストに表示されない場合があります。
「サーバ上にある空(から)のディレクトリを削除しようとしてもできない」
という場合、実際は空ではなくこの見えないファイルが存在し、そいつが原因になっている可能性があります。これはよくある話。
参考:ファイルリストの取得コマンドを設定する

今回紹介するのは、ピリオドで始まるファイルは確かに存在しないにも関わらずディレクトリが削除できなかったケースです。

WordPressのテーマを一新しようと思った私は、無料で配付されているものを手当たり次第にインストールして試しつつ、選外となったテーマを整理しようとftpクライアントで順次削除していました。
ところが、あるテーマのディレクトリは削除できません。
その削除できないディレクトリを開き、直下のphpファイルやフォルダを個別に削除していくなかで themes/テーマ名/css のディレクトリだけが頑なに削除できないことを突き止めます。こいつが原因なのでしょう。

そのcssディレクトリをNextFTPで開いた時のログがこちら。

< エラー:JISコード範囲外の1個のファイル名を表示できませんでした。 >

なるほど。hidden file(隠しファイル)があるのね…また.htaccessあたりか、と早合点しちゃいそうですが、このメッセージの肝は「JISコード範囲外」にあります。

そこで、NextFTPであれば オプション>ファイル名漢字コード と辿って、ファイルリストをシフトJISあたりにしてみます(私の場合、変更前はUTF-8に設定されていました)。
すると、見えなかったファイルが表示されました。その名も「layout のコピー.css」。

なんじゃこりゃ。こんなもん作った覚えないぞ。う~む…
原因は定かではありませんが、layout.css自体はcss内にあったので、何かのタイミングで複製されたようです。
このテーマはインストール後にWordPressの管理画面からオンラインでアップデート(更新)しているので、その際に作られたのでしょうか。残念ながら更新日を確認せずに消してしまったので断定はできませんが。

名称に2バイトコードを含んだファイル/フォルダをftpサーバに置くべきではありません。
サーバによっては転送自体が拒否されたり、転送できても文字化けを起こしたりと、ロクなことがありません。
NextFTPのマニュアルにも

UTF-8でJISの第1・第2水準にないファイル名は使用できません。ホスト側にコード外のファイル名がある場合は、そのファイルやフォルダは表示されません。

漢字のファイル名は思わぬトラブルの元になりますので、ホストにはなるべく漢字のファイル名を使わないようにしてください。漢字のファイル名を使用する場合は、事前にホストの管理者に漢字のファイル名が使用できるか確認するようにしてください。

と記されています。
私もそんなことは承知していましたが、もし今回の原因がテーマの更新ではないとしても、

  1. ftpクライアントのログをちゃんと読む
  2. 「~の筈がない」みたいな思い込み・先入観は置いとく

ことが解決の近道だとあらためて確認した次第です。

ちなみに、ログの「JISコード範囲外」ですが、「のコピー」のようなカナ文字はJISコードに含まれています。ただ文意としてはそういうことではなく「UTF-8設定だと表示しないファイルがあるよ」ということなんでしょう。たぶん。

削除中 ‘layout のコピー.css’
>DELE layout のコピー.css
250 Deleted layout のコピー.css
ファイルリストを取得しています…
(略)
< ファイルの削除が完了しました。 >

無事削除できました。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください