「4800483343」はディレクトリで、「file1」と「file2」はその中にある2つのファイルです。
なぜ次のような状況が発生しますか?
$ ls 4800483343
file1 file2
$ md5sum 4800483343/*
36468e77d55ee160477dc9772a99be4b 4800483343/file1
29b098f7d374d080eb006140fb01bbfe 4800483343/file2
$ mv 4800483343 4800[48]3343
$ md5sum 4800[48]3343/*
md5sum: 4800[48]3343/*: No such file or directory
$ md5sum '4800[48]3343'/*
36468e77d55ee160477dc9772a99be4b 4800[48]3343/file1
29b098f7d374d080eb006140fb01bbfe 4800[48]3343/file2
この問題を引き起こす可能性がある他の文字は何ですか?
ベストアンサー1
元の質問に答える
角かっこがシェル拡張を防止する理由
角かっこはシェルの拡張を防ぎませんが、引用符は避けます。
実際に実行したコマンドは次のようになりました。
これにより、次のファイルでmd5sumが実行されますdir/
。
$ md5sum d[i]r/*
02fdd7309cef4d392383569bffabf24c dir/file1
db69ce7c59b11f752c33d70813ab5df6 dir/file2
これにより、角かっこが拡張されないように引用符がdir
移動されます。d[i]r
$ mv dir 'd[i]r'
dir
もう存在しないディレクトリを探します。
$ md5sum d[i]r/*
d[i]r/*: No such file or directory
引用符のため、次のエントリは次の名前の新しいディレクトリにありますd[i]r
。
$ md5sum 'd[i]r'/*
02fdd7309cef4d392383569bffabf24c d[i]r/file1
db69ce7c59b11f752c33d70813ab5df6 d[i]r/file2
修正された質問に答えてください
修正された質問にはディレクトリ4800483343があり、次のコマンドが実行されます。
mv 4800483343 4800[48]3343
このコマンドを実行したときに発生することは、globが4800[48]3343
既存のディレクトリと一致するかどうかによって異なります。一致するディレクトリがない場合は、それ自体が4800[48]3343
展開され、4800[48]3343
ディレクトリ4800483343
がディレクトリに移動します4800[48]3343
。
ついに:
このコマンドは、
md5sum 4800[48]3343/*
globと一致するディレクトリがないため、「該当するファイルまたはディレクトリがありません」というエラーを返します4800[48]3343
。引用符はグローバル拡張を防ぐため、このコマンドは
md5sum '4800[48]3343'/*
ファイルを正しく検索します。
グローバル例
2つのファイルを作成しましょう。
$ touch a1b a2b
次の球を見てみましょう。
$ echo a[123]b
a1b a2b
$ echo a?b
a1b a2b
$ echo *b
a1b a2b