誰かがGlobal Linux 3.0.31-0.9サーバーに複数のスペース、角括弧、疑問符、およびコロンを含むファイル名を持つファイルを配置しました。
何もしないので名前の変更や削除はできません!
添付ファイル名とコマンドの例では、「横説説」を含むファイルを削除/名前変更しようとします。ここ。
私のls
結果:
-rw-r--r-- 1 root root 11306 May 2 03:25 who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
-rw------- 1 root root 15797 Jun 12 12:59 .viminfo
-rw------- 1 root root 1200 Jun 12 13:00 .lesshst
drwxrwxrwx 32 root root 4096 Jun 13 00:00 .snapshot
-rw------- 1 root root 32976 Jun 13 14:05 .bash_history
答え1
入力しにくい名前のファイルを扱う簡単な方法は、完成機能を使用することです。この場合、名前の最初の数文字は入力しやすいので、入力してからを押しますTab。
$ mv誰がTab見つかりましたか。txt
最初の文字を決定できない場合は、を押して現在のディレクトリのすべてのファイル名をTab循環させることができます。./
シェルの完了コマンドは、プログラムされた方法'
を使用して引用符付き\
文字列を生成します。
または、この引用文字列を直接作成することもできます。一重引用符内では、一重引用符自体を除くすべての文字が正常に解釈されます。したがって、ファイル名に一重引用符が含まれていない場合は、一重引用符の間に貼り付けてください。ただし、ls --show-control-chars
印刷できない文字に置き換えるのではなく、実際のファイル名(印刷されたとおり)が必要です。ファイル名に一重引用符がある場合'\''
(一重引用符、バックスラッシュ、一重引用符、一重引用符)に置き換えます。たとえば、という名前のファイルにit's
使用できます'it'\''s'
。
または、そのファイルにのみ一致するワイルドカードパターンを作成できます。たとえば、この場合:
$ ls -d w*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
wibble
私の例では、一致するファイルが2つあるため、ワイルドカードでは不十分です。文字を追加するだけです。
$ ls -d wh*
who suggesting to assign this issue to the group which is responsible for the application StreamServe. (Probably it is operated by Linq????:q
mv who* found.txt
最初の文字を印刷できない場合は、名前の他の部分と一致する別のパターンを選択できます。[!#-z]*
あるいは、同じ[!0-9A-Z_a-z]*
パターンを使用して[![:alnum:]]*
ファイル名の先頭にある一般文字を除外することもできます。
ファイル名が-
(ASCIIダッシュまたはハイフン)で始まる場合は、オプションとして解釈できます。./-wibble
これを防ぐために使用してください。
答え2
問題のあるファイル名を引用符で囲むことは、ファイル名を削除したり名前を変更したりする最も簡単な方法です。まず、テストファイルを作成します。
rm " -myfile(1):ok?"
ファイルがハイフンでのみ始まる場合は、「--」を使用してオプションがなくなり、先行ハイフンがコマンドパラメータであることをコマンドに通知します。
rm -- -myfile
ファイル名に印刷できない文字が含まれている場合は、find
そのinode番号を確認してからその文字を削除できます。
find . -iname "*myfile*" -exec ls -i {} +
9225180 ./ -myfile(1): わかりましたか?
find . -inum 9225180 -exec rm -i {} +
./ -myfile(1) 削除: 可能ですか?
-i
コマンドに(対話型)応答を追加します。たとえば、rm
目的のエンティティで作業していることを確認できます。