複数のディレクトリの名前をまとめて変更しようとしたときに、
rename 's/foo/barr/g' *
誤って rename( ) の代わりに mv を入力しましたが、mv 's/foo/bar/g' *
ディレクトリが消去されたように見えました。ただし、ls *
元々存在していたすべてのファイルが表示されます。何を提供しますか?それでも…どこかにありますか?ls
単独または前のようにディレクトリ全体のリストのみをls -a
表示します。ls *
ただポインタを読んでみませんか?簡単に回復しますか?
答え1
では、シェルによって現在の作業ディレクトリの語彙順序に従って隠されていないすべてのファイルまたはディレクトリの名前に展開されますmv 's/foo/bar/g' *
。*
それでは、、、、、...を使って電話をかけてみmv
ましょうか?mv
s/foo/bar/g
afile
bfile
cfile
考えられる結果はさまざまです。
- GNUなどのシステムを使用している場合は、
--
オプションの終わりを表示することを忘れていたため、デフォルトでは、mv
GNUはそのリストのファイルが呼び出されるとオプションではなく引数の後にオプションを受け入れます。ファイルは親ディレクトリに移動されます。-t..
mv
*
1つのファイルにのみ拡張するとなりますmv s/foo/bar/g that-file
。that-file
ディレクトリタイプの場合は、s/foo/bar/g
そのディレクトリにファイルを移動します。それ以外の場合は、名前をそのファイルに変更します。私はs/foo/bar/g
それが存在すると期待していないので(that-file
存在する場合はエラーが発生します)、エラーが発生します。- 複数のファイルに展開される場合、最後の
*
ifタイプではない場合目次、エラーが発生します。ディレクトリタイプの場合、すべてのファイルがそのディレクトリに移動されます。
ファイルが表示されるという事実は、ls *
あなたが上記の後者の状況にあることを示します。つまり、すべてのファイルが1つのディレクトリに移動してls
表示され、that-directory
他のすべてのファイルをそのディレクトリに移動した後にのみ展開され、*
そのディレクトリの内容を一覧表示するように要求されます。that-directory
ls *
ls that-directory
ls
that-directory
that-directory
これらのファイルの一部が移動されたファイル(afoo
とthat-directory/foo
以前の両方のファイル)で上書きされると、プロセスによって一部のファイルが失われる可能性があります。
that-drectory
そうでない場合は、ファイルを現在の作業ディレクトリに戻してファイルを復元できます。
たとえば、このコマンドを実行してから10分経過していない場合は、次のようにzsh
します。
mv that-directory/*(cm-10) .
ctimeが10分未満のファイルを現在の作業ディレクトリに戻します。