1つのディレクトリでls -l * .xmlコマンドが機能しない問題


2

奇妙な問題に直面しています。ls -l *.xml特定のディレクトリでを実行しようとしていますが、これを行うとメッセージが表示されます

ls: invalid option -- .
Try ls --help' for more information.

上記のような無効なオプションメッセージが表示されるのと同じディレクトリで何かを行うかls -l *.phpls -l *.txtそれが正常に動作する場合。私にとってさらに奇妙なことls -l *.xmlは、他のディレクトリで行う場合、それはうまく動作し、1つのディレクトリで行うように無効なオプションメッセージを与えないということです。

ls -l *.xmlルートと通常のログインの両方としてディレクトリで実行しようとしましたが、同じ無効なオプションメッセージが表示されます。

type ls
ls is aliased to `ls --color=tty'

which ls
alias ls='ls --color=tty'
    /bin/ls

whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

気を失いましたか?何が間違っているのでしょうか?ls -l *.xmlあるディレクトリでは動作しないが、他のディレクトリでは正常に動作するのはなぜですか?

編集:

ls -lをgrepにパイプしようとしましたが、このエラーが発生しました。ls -l *.xml他のディレクトリでも問題なく動作するので、なぜgrepにパイプする必要があるのか​​はわかりません。以前にgrepする必要はありませんでした。

ls -l | grep .xml
grep: invalid option -- .
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

ディレクトリにはどのファイルがありますか?私たちに与えてls -laくださいます。名前で始まる--か類似したファイルがあると思います。
slhck

はい、それがまさに問題でした。ディレクトリの内容全体を注意深く調べたところ、文字通りの名前のファイルが見つかりました-.xml。どうやらファイル名のダッシュが問題を引き起こしていたようです。実際、rm -.xmlファイル名がrm失敗する原因となっていたため、ファイルを削除することさえできませんでした。グラフィカルなSFTPクライアントを介してディレクトリに移動し、それを削除する必要がありました。ファイルが削除されると、すべてが再び機能しているようです。
メリックデニス14年

いくつかの簡単な観察。' - 'は通常の照合シーケンスで英数字の前にあるため、bashがファイルマスクを展開するときは、通常-.xmlが最初になります。これは、lsがパラメータを見る前に行われます。入力された文字列と拡張ファイル名を区別できません。他のコマンドと同様に、lsはオプションの終わりに「-」を受け入れるため、機能します。grepエラーを再現できませんが、同様のエラーが発生しました。コマンドは次のとおりである必要があります。コマンドはAxmlBなどの名前を検索します(常に英数字ではない単一引用符の検索文字列)。ls -l -- *.xmlls -l | grep *.xmlls -l | grep '\.xml$'
AFH

回答:


2

*.xmlglobは.xml現在のディレクトリ内のすべてのファイルに展開されるため、globは次のように解析されるものに展開されると想定します。

ls -l -- .....

または同様の、つまり、で始まるファイル--

で簡単なリストを作成して、そのファイルが何であるかを見つけてくださいls -la

上記のファイルを削除してみてくださいrm -- --filename--ファイル名をオプションとして解析したくない場合は、これが必要です。または、GUIから、またはを使用して削除することもできますrm "--filename"


-2

試してくださいls -l | grep .xml。ls -l * .xmlのようなものが最初にどのように機能するかわかりません。結果を単一のファイル形式に絞り込もうとすると、通常はパイピングとgrepが役立つと思われるからです。


感謝しますが、まだ機能していません。上記の私の編集を参照してください。私はもう少し掘り下げていますが、今どのような問題が発生しているのかわかります。
メリックデニス14年

1
これは少し不正確です/そうではありません。globは現在のディレクトリ内のすべてのXMLファイルに展開され、コマンドが実行されるls -l *.xmlため、もちろん動作します。*.xmlls -l foo.xml bar.xml baz.xml ...
slhck 14年

ああああ 説明をありがとう。特定のファイル/形式を探していたとき、私は常にパイプ/ grep
ryekayo 14年

1
ええ、それは本当に必要ありません。また、ファイル名を後で処理する場合、たとえばファイル名をループするなど、エラーが発生しやすくなります。for f in *.xml; do…代わりに行うことができますfor f in $(ls | grep .xml); do…
slhck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.