web-dev-qa-db-ja.com

誤った名前変更コマンド後のファイルの場所

初心者はここで...名前に2つのドットが含まれているファイル名を1つのドットに変更しようとしました

rename 's/.././' filename

ファイルは消えましたが、メモリには同じ量のスペースが残っているため、削除されたとは思いません。このファイルはどこに送信されますか?

7
Serge

ファイルの名前は.lenameになりました。

(これはファイルが以前にfilenameと呼ばれていたと想定していますが、「実際の」ファイルは別の名前になると思います。しかし、ファイルが呼び出されたにもかかわらず、最初の2文字が.に置き換えられました。)

これは、正規表現のドットが 特殊文字 の意味が任意の文字に一致するためです。したがって、..は任意の2文字です。 global修飾子(rename)を追加しない限り、gは最初の一致のみを置換するため、最初の2文字指定されたファイル名は置き換えられました。

s/regex/replacement/modifiers の「置換」は正規表現ではないため、式の右側の.s/.././は期待どおりに機能することに注意してください。


今、あなたのファイルはどこですか:

.で始まるファイルは隠しファイルです。したがって、lsを実行しても表示されません。 ls -aを実行して、これらのファイルを表示します。

mv .lename filenameを使用してファイルの名前を元に戻します


次回は、正規表現に特有のエスケープ文字:

rename 's/\.\././' filename

また、rename -n ...を使用して予行演習を行い、実際の名前変更を実行する前に結果を確認することもできます。それはあなたにこのようなものを示したでしょう:

rename(filename, .lename)
20
pLumo