Linuxのコマンドラインで不良ファイルを操作する

コマンドラインで作業する場合、管理者は特定のファイルで何かを行う必要があることがよくあります。削除、移動、コピーです。 そのようなタスクを実行する場合、多くの場合、ファイル名にさまざまな文字が含まれているため、名前でファイルにアクセスする必要がありますが、これは難しい場合があります。 キーボード上にないものも。 この点で、ファイルマネージャーは作業を容易にすることができます。この場合、ファイルを選択して、必要なアクションを実行するだけで済みます。 しかし、コマンドラインのみで作業することに慣れている人のために、以下の方法が提供されています。



シェルとして、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'


まあ、結局のところ、実際にはそのようなファイルはめったに遭遇しません。



All Articles