2016-04-25 19 views
0

私は仕事をしていたので、特定のファイルをフォルダに入れる必要がありました。 私は ls -lrt *ABCD*201604* とタイプし、 *ABCD*201604* not foundを返しました。Unixコマンドls -lrtが予期せぬ結果を出す

次に、そのようなファイルが実際に存在するかどうかを確認するために、私はls -lrtを実行し、そのようなファイルがあることを発見しました。

次に、コマンドls -lrt *ABCD*201604*を入力している間に、リストされたファイルからABCD201604をコピーしました。

私は両方のコマンドを比較して間違いがないかどうかを確認しましたが、どちらも同じであることがわかりました。そのような行動の説明はありますか?私が書いた

ワン:

$ ls -lrt *RFPTDW*20160425* 
RFPTDW107_01_01_20160425_1526.txt 
RFPTDW059_01_01_20160425_1527.txt 

を第二の出力では、私は他の詳細が、ファイル名を省略している:私はコピー

$ ls -lrt *RFPTDW*20160425* 
*RFPTDW*20160425* not found 

一つ。

+0

'* abcd * 201604 *'は 'abcd'の後に' 201604'が続くファイルとマッチします。 ACROSSファイル名と一致しません。両方の文字列パターンをその順に持つ単一のファイルのみを検索します。例えば'201604abcd.txt'はマッチしませんし、' abcd.txt'や '201604.txt'でも' abcdfoobar201604bazqux.txt'は –

+0

と表示されます。あなたの脚本で失われているような微妙なものかもしれません。( 'ls -lrt * ABCD * 201604 *'と '* ABCD * 20160425 * not found 'と表示されているのは、余分な' 25'のために正しくないと言われていることに気がついています。これ。) –

+0

@ジョンクーゲルマン、ごめんなさい。それは単にイラストレーションのためだった。私は正確なコマンドと出力を追加します。 –

答えて

2

文字エンコーディングが問題になることがあります。 Unicodeには、ASCII文字(いわゆるホモグリフ)と同じように見える文字があります。だから、あなたが貼り付けたものをコピーするときにしか使えない「特殊な」文字があるかもしれません。

また、ASCII文字は、時には0-O(ゼロ、手紙O)のように区別することが困難な、または1- l(OneとレターL)

+0

ファイル名がUTF-8エンコーディングであれば、コマンドIを使用してリストされないと言っていますか? そして、ホモグリフの場合は間違いありません。 –

+0

@Deepak jhaいいえ、それが表示されます。しかし、例えば、 Aのように見えますが、ASCII Aではなく、 'ls * A *'と打っても機能しませんが、 'ls * A *'のように見えますが実際にはそうではありません) –

3

シェルはコマンドラインでグロブを拡大する責任があります。実行されたコマンドには、ワイルドカード文字が表示されません。拡張された引数が表示されます。

これらがどのように展開されているかを確認する場合は、希望のコマンドをechoの前に追加してみてください。こうした同様:lsコマンドがどの名前が存在しないファイルの引数*ABCD*201604*を、手渡されることになるので、最後の行に、グロブはもはや、ファイル名に展開されていること

$ touch ABCD 
$ touch 201604 
$ touch foo_ABCD_bar_201604_baz 
$ echo ls -lrt *ABCD* 
ls -lrt ABCD foo_ABCD_bar_201604_baz 
$ echo ls -lrt *201604* 
ls -lrt 201604 foo_ABCD_bar_201604_baz 
$ echo ls -lrt *ABCD*201604* 
ls -lrt foo_ABCD_bar_201604_baz 
$ rm foo_ABCD_bar_201604_baz 
$ echo ls -lrt *ABCD*201604* 
ls -lrt *ABCD*201604* 

注意してください。

編集:

あなたは、実際のコマンドにechoを付加した場合、私はあなたの結果は、最初のケースで

$ echo ls -lrt *RFPTDW*20160425* 
ls -lrt *RFPTDW*20160425* 

、第2の場合で

$ echo ls -lrt *RFPTDW*20160425* 
ls -lrt RFPTDW107_01_01_20160425_1526.txt RFPTDW059_01_01_20160425_1527.txt 

になることを期待します。最初のケースでは、ファイルは存在しないので、グロブは何にも拡張されません。 2番目のケースでは、いくつかのファイルがglobにマッチするので、シェルはそれを展開できます。

+0

私は私の場合を追加しました。あなたはそれをあなたの答えに関連づけてください。 –

関連する問題