web-dev-qa-db-ja.com

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

Tarballを解凍しているときに、lsが「????????????????????」と報告するディレクトリに遭遇しました。おそらく、名前はユニコードではありませんか?とにかく、フォルダにアクセスする方法がわかりません。 cd $(find -inum inode_number)を試しましたが、

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

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

8
jackd243

任意のディレクトリ(またはファイル)を操作できるようにするための一般的なアプローチは、そのiノード番号を使用することです。

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

ls -lia
  • -l長いリストの場合(オプション)
  • -iiノード値を取得するには
  • -a隠しファイルも含め、すべてのファイルを表示するには(オプション)

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

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

これで、次を使用してそのディレクトリに変更できます。

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

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

もちろん、コマンドはcdである必要はありません。 rmcpmvetc ..のようになります。

2
Tyilo

文字は国際文字である可能性が高いため、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コマンドを使用して制御文字を削除するための迅速で汚い方法があります。これは、スペースをエスケープする限りは機能すると思いますが、疑問符をエスケープしないでください(したがって、単一の文字にします)。ワイルドカード)、およびこの不正なディレクトリがあるディレクトリに他に何も存在しない限り。これらの明示的な要件の理由は、ワイルドカード文字と単一のスペースのみを使用しているため、ワイルドカードが他のファイルまたはディレクトリと誤って一致しないようにするためです。

上記の方法が機能しない場合は、他の応答で言及されているfindメソッドを別の方法でほぼ確実に使用できます。あなたが試したと言ったiノード番号を使用してディレクトリにcdしようとするのではなく、iノード番号を使用してディレクトリの名前を変更できます。上記のページから、その1つのコマンドの3行のセット全体を必ずコピーしてください(「desired-name」の部分を実際の名前に置き換えてください)ただし、名前を変更します)。

ディレクトリの名前が変更されると、アクセスできるようになります。名前に制御コードが含まれているファイルが含まれていないことを願うだけです。そうしないと、名前を変更したディレクトリ内のすべてのファイル(および/またはサブディレクトリ)をリンスして繰り返す必要があります。その時点で、forループが発生します。おそらく、1からインクリメントして、すべてのファイルに番号として名前を付けるのが賢明です。:-)

2
Speeddymon

「?」シェルでは特別な意味があり、「なしを含むすべての文字」を意味します。したがって、ファイルの名前が実際に「????????????????????」の場合あなたはおそらく「?」を脱出する必要があります(そしてスペースも)cd \?\?\?\?\?\?\ \?\?\?\?のようなものを試すことができます(まだ試していなかった場合)

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

0
Valrian

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

0
kmort

Midnight Commander(テキスト)、Nautilus(GNOME)、Dolphin(KDE)などのファイルブラウザーを使用して、ディレクトリを操作します。

0
Michael Hampton

名前を入力するのが奇妙で難しいディレクトリ(またはファイル)を操作するには:

1)ls -iを実行して、ファイルのiノードを検出します。

このlsオプションは、ファイルの各名前と、ファイルシステム(iノード)上のこのファイルの識別子を提供します。

2)findを使用してファイルに対してコマンドを実行します

iノードは9961926だったと言います

あなたは走ることができます

 find * -Prune -inum 9961926 -exec rm -i {} \;

ファイルを削除するには

または

 find * -Prune -inum 9961926 -exec mv {} other-name \;

より良い名前に移動するには

あるいは

 find * -Prune -inum 9961926 -exec ln -s {} non-horrible-name \;

古い名前を維持しながら新しい名前を付ける

(おそらく、他のコマンドも実行できます。残念ながら、この行を使用してcdを実行することはできませんでした)

0
josinalvo

lsを実行します。ディレクトリ(ファイルまたはサブディレクトリ)に、ミステリーサブディレクトリ(「??????????????? ?????」の場合は21)よりも長い名前の何かがありますか?正確)?次に、名前を短い名前に変更するか、他のディレクトリに移動します。次に、

cd ????????????????????*

このワイルドカード(20個の疑問符の後にアスタリスクが続く)は、20文字以上の名前と一致する必要があります。最初の指示で、ミステリーサブディレクトリだけがそのパターンに一致することを確認する必要があります。しかし、それはもっと便利かもしれません

mv ????????????????????* 新しい名前

0
Scott