名前を変更する代わりにmvを使用すると、ファイルは消えます。

名前を変更する代わりにmvを使用すると、ファイルは消えます。

複数のディレクトリの名前をまとめて変更しようとしたときに、 rename 's/foo/barr/g' * 誤って rename( ) の代わりに mv を入力しましたが、mv 's/foo/bar/g' *ディレクトリが消去されたように見えました。ただし、ls *元々存在していたすべてのファイルが表示されます。何を提供しますか?それでも…どこかにありますか?ls単独または前のようにディレクトリ全体のリストのみをls -a表示します。ls *ただポインタを読んでみませんか?簡単に回復しますか?

答え1

では、シェルによって現在の作業ディレクトリの語彙順序に従って隠されていないすべてのファイルまたはディレクトリの名前に展開されますmv 's/foo/bar/g' **

それでは、、、、、...を使って電話をかけてみmvましょうか?mvs/foo/bar/gafilebfilecfile

考えられる結果はさまざまです。

  • GNUなどのシステムを使用している場合は、--オプションの終わりを表示することを忘れていたため、デフォルトでは、mvGNUはそのリストのファイルが呼び出されるとオプションではなく引数の後にオプションを受け入れます。ファイルは親ディレクトリに移動されます。-t..mv
  • *1つのファイルにのみ拡張するとなりますmv s/foo/bar/g that-filethat-fileディレクトリタイプの場合は、s/foo/bar/gそのディレクトリにファイルを移動します。それ以外の場合は、名前をそのファイルに変更します。私はs/foo/bar/gそれが存在すると期待していないので(that-file存在する場合はエラーが発生します)、エラーが発生します。
  • 複数のファイルに展開される場合、最後の*ifタイプではない場合目次、エラーが発生します。ディレクトリタイプの場合、すべてのファイルがそのディレクトリに移動されます。

ファイルが表示されるという事実は、ls *あなたが上記の後者の状況にあることを示します。つまり、すべてのファイルが1つのディレクトリに移動してls表示され、that-directory他のすべてのファイルをそのディレクトリに移動した後にのみ展開され、*そのディレクトリの内容を一覧表示するように要求されます。that-directoryls *ls that-directorylsthat-directory

that-directoryこれらのファイルの一部が移動されたファイル(afoothat-directory/foo以前の両方のファイル)で上書きされると、プロセスによって一部のファイルが失われる可能性があります。

that-drectoryそうでない場合は、ファイルを現在の作業ディレクトリに戻してファイルを復元できます。

たとえば、このコマンドを実行してから10分経過していない場合は、次のようにzshします。

mv that-directory/*(cm-10) .

ctimeが10分未満のファイルを現在の作業ディレクトリに戻します。

関連情報