Linuxファイル名などに使用してはいけない文字を説明する多くの質問/答えがあります。
コマンドラインで処理するためにエスケープ文字を必要とせずにファイル名の前にlsの先頭に置くことができる英数字以外の文字を探しています。
macOSではGUIソートに<Filename>を使用しますが、<はコマンドラインで正しく機能せず、もちろん適切にエスケープする必要があります。同様に、-Filename-はコマンドラインで正しく機能しません。
(ほとんど)シェルに特別な意味を持たないすべての英数字の前に特殊文字がありますか?
それとも、以前にソートされたすべての文字が使用されますか? :-( :-)
ありがとう、アシュリー。
PS:111-が使用されているのを見たことがありますが、それは私には適していません...
答え1
あなたがそれを知る前に、あなたは2つの非常に複雑な質問、すなわち引用と順序を尋ねています。
ソート順序は、ロケール設定によって決まります。最初は…固定されていません。
例えば
$ touch Hello hello There there
$ LANG=C ls -1
Hello
There
hello
there
$ LANG=en_US ls -1
hello
Hello
there
There
以下は引用問題です。これはシェルに非常に依存しています。したがって、私の標準シェル(ksh99)ではこれは!
良い文字です。しかしこれは失敗したbash
。
$ ls
!README 0 1 2 a b c
$ cat !README
hello
$ bash
bash-4.2$ cat !README
bash: !README: event not found
ASCIIシーケンスで作業している場合、最初の「有用な」文字は+
。 ksh/bash/zsh/cshでは特殊文字ではないようです。
しかし、引用はシェルによって異なりますので、そして一部のコマンドはaを+
引数として使用できますが(歴史的にはhead
そうです)、確かにわかりません。
もちろん、LANG設定は上書きすることができます(したがって、+
最初の設定ではありません!)。
% LANG=en_US ls -1
0
1
2
a
b
c
+hello
だから、一般的に言えば…必ず最初に出てくる特定のキャラクターはありません。
答え2
ソート順序は、ls
コマンドラインオプションと言語設定によって異なります。 LANG変数が自然言語に設定されている場合、%、_、-、+、または:(Bashでエスケープする必要がない文字)などの特殊文字は無視される可能性があります。とにかく LANG=en_US.UTF-8 の場合です。
ただし、LANGがCに設定されている場合、ファイル名はその文字のASCII値に従ってソートされているように見え、実際に上記の特殊文字を使用して出力内のファイルの場所を「上げる」ことができますls
。例:
$ LANG=C ls
%myfile
+myfile
-myfile
:myfile
_myfile
clr-debug-pipe-440205-1575025808-in
clr-debug-pipe-440205-1575025808-out
...
$ LANG=en_US.UTF-8 ls
clr-debug-pipe-440205-1575025808-in
clr-debug-pipe-440205-1575025808-out
dotnet-diagnostic-440205-1575025808-socket
f.py
%myfile
+myfile
-myfile
:myfile
_myfile
...
タイムスタンプ、所有権などに基づいてソートするためのコマンドラインオプションがあることを忘れないでください。