Cでファイルマネージャを作成しても誤って削除できないファイルが2つ作成されました。
ファイル1:
''$'\n'
ファイル2:'b.txt'$'\n'
2回入力rm
してタップしてもtab
表示されません。
どのように削除しますか?
編集する:
出力ls -la
:
-rw-r--r-- 1 pi pi 0 Feb 7 04:12 ''$'\n'
-rw-r--r-- 1 pi pi 0 Feb 7 00:48 'b.txt'$'\n'
答え1
'b.txt'$'\n'
これはおそらく最後の一重引用符で後者になければなりません。
これは、引用スタイルを使用したGNU lsの出力に似ていますshell-escape
。最新バージョンのGNU lsはデフォルトでこれらの参照を使用します。同じ出力が提供されていることを確認するために実行して、ls -l --quoting-style=shell-escape
それを確認できます。名前が示すように、出力はシェルのように引用されるため、シェルへの入力として使用できます。したがって、引用符/エスケープされた出力をls
Bashにコピーして貼り付けると、ファイルの一方または両方が削除されます。
ls -l ''$'\n' 'b.txt'$'\n
もちろん、rm ...
正しいファイルを受け取ったことを確認した後です。
それは価値があるため、最初のファイル名は単一の改行であり(何らかの理由でエスケープは前にnullを追加します''
)、2番目のファイル名はb.txt
最後の改行です。
答え2
「rm」と入力してください。lsで表示されるファイル名"たとえば、ファイルを削除する
rm ''$'\n'
背景:
- ファイル名に改行文字が追加されています(または、その場合は
''$'\n'
改行文字のみがあります)。 ls -N
他の(既存の)ビューを表示するには、入力してください。$'\n'
改行文字表現については「ANSI-Cリファレンス」(http://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html)- lsのさまざまな出力形式については、「GNU Coreutils - ファイル名の引用」(https://www.gnu.org/software/coreutils/quotes.html)またはマニュアルページls(1)(
man 1 ls
) - 「参照」を探してください。 - シェルタブ補完機能が改行文字を含むファイル名を正しく処理できないようです。特に
''$'\n'
- 改行で始まるファイル名は、二重引用符の
ls
2つを先頭に追加することによって特別に処理されます。おそらくバグかもしれません。