シェルとして、bashが最も使用されると考えてください。 また、ファイルに対する操作として、削除は最も破壊的なものと見なします。
状況は異なる場合があります。 現在のディレクトリに、削除する必要があるファイルと一緒に削除する必要があるファイルが存在する場合があります。 それらの名前は非常に異なる場合があります。 さらに、前者と後者は、1つのトリッキーなシンボルのみが異なる場合があります。
ファイル名にbashサービスシンボルがあります
最も単純なケース。 名前にスペース、引用符、二重引用符、アスタリスク、逆引用符などの補助文字を含むファイルを削除するには、バックスラッシュでエスケープするか、単一引用符を使用します。
$ rm -f my \:ファイル\ name $ rm -f '白のファイル:スペース:および:コロン' $ rm -f \(ファイル名\)
単一引用符を使用すると、名前に単一引用符が含まれるファイルは、エスケープしても削除できません。
ユーティリティ文字の完全なリストとbashのエスケープメカニズムは、 man bashにあります。 QUOTINGセクション。
ファイル名はハイフンで始まります
ハイフンで始まるファイルの削除は単純なエスケープでは機能せず、 rmコマンドはハイフンを引数の先頭として扱います。 問題の解決は非常に簡単です:
$ rm -f ./-abc
または:
$ rm -f--abc
ワイルドカードで削除
ファイルの削除がワイルドカードマスクに該当する場合、ファイルのグループ全体を削除できます。
$ rm -f * .jpg
名前に制御文字が含まれるファイル
ファイル名には、改行(\ n)、タブ(\ t)、バックスペース(\ b)などのASCII制御文字が表示される場合があります。 これらは、0x20未満のASCIIコードを持つ文字と、DELETEおよびESC文字です。 そのようなファイルを削除するには、次の構成が適しています。
$ rm -f $ 'any \ nfile' $ rm -f $ 'any \ bfile'
このようなファイルを削除する別の方法は、キーボードから制御文字を入力することです。 これを行うには、入力された次の文字を選別するキーの組み合わせを使用して、システムがその文字を処理できないようにします。 通常、この組み合わせはCTRL + Vです。 lnextパラメーターを調べると、 stty -aコマンドでこれを確認できます。 ESC文字を含むファイルを削除します。
$ rm -f any#CTRL + Vを押してからESC $ rm -f any ^ [#エスケープ文字を追加 $ rm -f any ^ [ファイル
utf8文字のファイルを削除する
ファイル名に、キーボードで入力できないutf8エンコード文字が含まれている場合、マウスで選択してクリップボードにコピーし、 rmコマンドを貼り付けて入力することにより、そのようなファイルを削除できます。 主な条件は、端末がutf8エンコーディングで動作する必要があることです。 エンコーディングは端末設定で設定されます。 xterm、putty、または残忍なlinux ttyです。
$ ls -1 朲晦 晩晩 朲晪 $ rm -f朲晪
ファイル名変換
ファイル名が端末エンコーディング以外のエンコーディングであると疑われた場合、現在のディレクトリ内のすべてのファイルをトランスコードできます。 その結果、ビットエンコーディングのファイルはトランスコードされ、ASCII文字のファイルは変更されません。 この方法の大きな利点は、すべてのファイルを読み取り可能にすることです。
$ convmv -fcp1251 -tutf8 *
ご覧のとおり、正しくトランスコードするには、ファイルの意図されたエンコードと端末のエンコードの2つのエンコードを知る必要があります。 あいまいな文字によってファイルの意図されたエンコードを認識することは最も困難です。 素晴らしいタブレットがあります
エンコードを自動的に認識しようとするサードパーティのプログラムを使用することもできます。 たとえば、 オンライン Lebedev デコーダー 。
マウントされたメディアまたはマウントされたWindowsパーティションでそのような文字に遭遇した場合、急いで何もトランスコードしないでください。 おそらく、間違ったマウントオプションを指定したのでしょう。
オートコンプリート
ディレクトリ内の必要なファイルの名前が一意に始まり、この名前がオートコンプリートによって一意に生成される場合、これはファイルを削除するかなり簡単な方法です。
$ rm -f icantype_#Tabキーを押す $ rm -ficantype_ \ .jpg
選択メニューからファイルを削除します
ここに着いたら、物事は悪いです。 特定のファイルを削除して、このための選択メニューを作成してみましょう。 その結果、ファイル名を入力する代わりに、目的のメニュー項目を選択するだけです。 これを行うには、必要なメニュー項目を入力した後にファイルで発生するアクションをプログラムする必要があります。
$ *でiを選択します; do rm -f $ i; やった 1)file.zip 3)??? ???。doc 5)朲晩 2)?? ??。jpg 4)朲晦 #? 2 #? ^ C
iノード番号で削除
iノード番号でファイルを削除できます。 iノード番号は、ファイルシステム内のファイルを一意に識別します。 lsコマンドでiノード番号を検索し、findで削除できます 。 この方法の欠点は、前の方法と同じです。 多数のファイルがある場合は不便です。
$ ls -1 -i 144368 ???。Txt 144363 ??。Txt 見つける。 -inum 144368 -delete
六角除去
そして、1つの厳しい方法に言及することを怠ることはできません。 16進コードによる削除。 一番下の行は次のとおりです。ファイル名のすべてのバイトの16進コードを認識し、名前の代わりに16進コードを指定してファイルを削除します。
* for i in *; do echo -n $ i | xxd; やった 0000000:面c0d0 32a4 .... 2。 $ rm -f $ '\ xfa \ xce \ xc0 \ xd0 \ x32 \ xa4'
まあ、結局のところ、実際にはそのようなファイルはめったに遭遇しません。