4

わかりました、私は 10 年以上にわたって Solaris を使用してきましたが、これを見たことがありません...

同じ名前のファイルとサブディレクトリの両方を含むディレクトリ リストがあります。

-rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehan
drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan

file を使用してファイルの内容を検出すると、次のようになります。

bash-2.03# file msheehan
msheehan:       directory
bash-2.03# file msh*
msheehan:      ascii text
msheehan:       directory

ファイルは気にしていませんが、ディレクトリは残しておきたいので、rm してみます。

bash-2.03# rm msheehan
rm: msheehan is a directory

だからここに私の2つの部分の質問があります:

  1. これどうしたの?
  2. ファイルを慎重に削除するにはどうすればよいですか?

ジョナサン

編集:答えてくれてありがとう、両方(これまでのところ)役に立ちましたが、リストをエディターにパイプするとうまくいきました。

bash-2.03# ls -l > jb.txt
bash-2.03# vi jb.txt

含まれるもの:

-rw-r--r--   1 root     other    15922214 Nov 29  2006 msheehab^?n
drwxrwxrwx  12 msheehan sysadmin    2048 Mar 25 15:39 msheehan

バックスペースキーには常に注意してください!

4

8 に答える 8

6

シェルが名前の拡張バージョンを渡したときにコマンドファイルがそれらを区別できたため、これらは実際には同じように「見える」2つの異なるファイル名であると推測します.lsをodまたは別の16進/8進ダンプにパイプしてみてくださいユーティリティを使用して、それらが本当に同じ名前であるかどうか、または非印刷文字が含まれているかどうかを確認します。

于 2008-09-17T13:36:12.920 に答える
1

iNode を使用して削除できます

「ls」で「-i」オプションを使用する場合

$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?
20802 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a\?
$ find . -inum 20802 -exec rm {} \;
$ ls -li
total 1
20801 -rw-r--r-- 1 root root 0 2010-11-08 01:55 a?

SolarisでiNodeを使用してファイルを削除する方法の例(スペイン語)があります http://sparcki.blogspot.com/2010/03/como-eliminar-archivos-utilizando-su.html

ウルコ、

于 2010-11-17T18:40:30.030 に答える
1

これは何が原因なのか気になります。ファイルシステムのバグは別として、ASCII 以外の文字が何らかの形で通過したことが原因である可能性があります。その場合は、より簡単な文字列セマンティクスを持つ別の言語を使用して操作を実行してください。

このルビ スニペットの出力がどうなるかを見るのは興味深いでしょう:

ruby -e 'puts Dir["msheehan*"].inspect'
于 2008-09-17T14:09:58.440 に答える
0

パート2では、1つの名前に2つの余分な文字が含まれているため、次を使用できます。

mv sheehan abc
mv sheeha??n xyz

それが済んだら、必要に応じて修正できる正常なファイル名が再び得られます。

于 2008-10-12T23:14:06.670 に答える
0

ファイルに特殊文字が含まれているかどうかを確認するには、solaris 8にこれらのオプションがあると仮定して、lsに対して-bまたは-qオプションを試してください。

ファイルを削除する別の解決策として、グラフィカルファイルブラウザ(gasp!)を起動し、不要なファイルをゴミ箱にドラッグアンドドロップできます。

別の解決策は、1つのファイルを別の名前(不明な特殊文字がないファイル)に移動してから、ワイルドカードを使用して特殊文字のディレクトリ名を削除することです。

mv msheehan temp
rm mshee*
mv temp msheehan

もちろん、削除するファイルのみがワイルドカードと一致することを確認する必要があります。また、特定のケースでは、一方がディレクトリでもう一方がファイルであるため、このコマンドですべてが解決された可能性があります。

rmdir msheeha*
于 2008-09-18T04:36:16.457 に答える
0

そして、私自身の質問のパート2への簡単な回答...

ディレクトリの名前を変更し、ファイルを削除して、ディレクトリの名前を元の名前に戻すことができると思います。

...他の人が何を考え出すのか、私はまだ興味があります。

JB

于 2008-09-17T13:27:42.257 に答える
0

そのうちの 1 つは、名前に奇妙な文字が含まれているのではないかと思います。シェルのワイルドカード展開を使用して、次のことを確認できます。

cat msh*

ワイルドカード拡張キーを押します(私のシェルでは Ctrl-X * です)。2 つの名前がリストされているはずですが、そのうちの 1 つにはエスケープ文字が含まれている可能性があります。

于 2008-09-17T13:32:46.953 に答える
0

非印刷文字と空白をすばやく簡単に確認する方法の 1 つは、cat -vetを介して出力をパイプすることです。次に例を示します。

# ls -l | 猫 - 獣医

綺麗で覚えやすい!

于 2008-09-20T05:42:42.027 に答える