名前が不明なディレクトリに移動する

名前が不明なディレクトリに移動する

tarball を解凍しているときに、ls「??????????????? ?????」と表示されるディレクトリに遭遇しました。おそらく、名前が Unicode ではないのでしょうか? とにかく、フォルダにアクセスする方法がわかりません。試してみましたがcd $(find -inum inode_number)

"bash: cd: ./??????????: No such file or directory".

フォルダーに inode 番号で直接アクセスする別の方法はありますか?

答え1

任意のディレクトリ (またはファイル) を操作できるようにする一般的な方法は、その inode 番号を使用することです。

まず、ls を使用して問題のフォルダーの inode を取得します。

ls -lia
  • -l長いリスト用(オプション)
  • -iinode値を取得する
  • -a隠しファイルも含めたすべてのファイルを表示する(オプション)

リストの最初の列に、次のような長い数字が表示されます。

2104697 drwx------ 2 user group 4096 date time WEIRD_DIRNAME

次のコマンドを使用してそのディレクトリに移動できます。

cd "$(find -inum ######)"

...ただし、###### をディレクトリ リストで取得した長い番号に置き換えます。

もちろん、コマンドは である必要はありませんcdrmcpmv、などでも構いません。...

答え2

これらの文字はおそらく国際文字であるため、en_US 文字セットでは制御コードとして表示され、ls では疑問符として表示されます。

これは、ディストリビューションがグローバル プロファイルでデフォルトで ls をエイリアスすることを選択したためである可能性があります。例:

alias ls='ls -q'

シェルに次のように入力すると、ディストリビューションがこれを実行したかどうかを確認できます。

alias ls

次のような内容が出力されます。

$ alias ls
alias ls='ls --color=auto'

下記のリンク先のページには、「ls -b」を実行すると 8 進制御コードが表示されるので、少なくともどの文字が使用されているかがわかると書かれています。

http://www.arsc.edu/arsc/support/howtos/nonprintingchars/

それが機能しない場合は、下部に記載されている別のオプションもあります。

今まで知らなかった OctalDump というツール (Debian の場合 -- /usr/bin/od)

$ ls | od -b

制御コードの 8 進形式を表示します。

$ ls | od -c

末尾にある可能性のある隠れた追加の空白文字を含む文字を表示します(例では末尾の余分なスペースに注意してください)

どのような制御文字が使用されているか、および追加の隠し空白があるかどうかがわかれば、制御文字をエスケープしてディレクトリに cd する方法を工夫できる可能性があります。それができない場合は、ディレクトリの名前を変更するためのオプションがいくつかあります。

また、上記のページには、mv コマンドを使用して制御文字を削除する簡単な方法も記載されており、スペースをエスケープし、疑問符をエスケープしない (つまり、1 文字のワイルドカードにする) 限り、また、この不正なディレクトリがあるディレクトリに他に何も存在しない限り、機能すると思います。これらの明示的な要件の理由は、ワイルドカード文字と 1 つのスペースのみを使用しているため、ワイルドカードが誤って他のファイルやディレクトリと一致しないようにするためです。

上記の方法がうまくいかない場合は、他の回答で言及されている検索方法を別の方法で使用できます。あなたが試したと言っているinode番号を使用してディレクトリにcdするのではなく、inode番号を使用して名前を変更できます。3上記のページからそのコマンドの行を 1 つ選択します (ただし、「desired-name」の部分は、実際に名前を変更したい名前に置き換えます)。

ディレクトリの名前を変更したら、そのディレクトリにアクセスできるはずです。名前に制御コードを含むファイルが含まれていないことを祈るばかりです。そうしないと、名前を変更したディレクトリ内のすべてのファイル (およびサブディレクトリ) に対して同じ操作を繰り返す必要があります。その場合は、for ループを使用して、すべてのファイルに 1 から増分する番号で名前を付けるのが賢明でしょう。:-)

答え3

「?」はシェルでは特別な意味を持ち、「文字なしを含む任意の文字」を意味します。したがって、ファイル名が実際には「??????????????? ?????」である場合は、「?」 (およびスペースも) をエスケープする必要があるため、cd \?\?\?\?\?\?\ \?\?\?\? (まだ試していない場合) のようなコマンドを試すことができます。

これは、文字化けした/破損した/違法なエンコードではなく、誰かが意図的にファイルにそのトリッキーな名前を付けたと想定しています。

答え4

そこに何が入っているかを確認する簡単な方法は、FileZilla を使用してマシンに FTP することです。その後、FileZilla を使用してディレクトリの名前を変更できます。

関連情報