私はaというスクリプトを生成し、実行するためにmyscript
aを実行しました。chmod +x myscript
実行しようとしましたが、拡張機能を忘れてしまったことにmyscript
気づきました。.sh
したがって、私のシェルで次のコマンドを実行しますbash
。
mv myscript *.sh
...チャジャン、ファイルはもう存在しません。名前で検索して過去1時間に変更されたすべてのファイルのリストを取得しましたが、ファイルが見つかりませんでした。どこに行きましたか?修理する必要がある他の損傷はありますか?
ベストアンサー1
*.sh
現在のディレクトリのパターンに一致する少なくとも1つのディレクトリ、または正確に1つのファイルがある可能性があります。
ディレクトリの場合は、そのディレクトリのファイルが
myscript
破損していないことを確認できます。はいmkdir dir.sh mv myscript *.sh
この
mv
コマンドはシェル拡張され、ファイルがmv myscript dir.sh
そのディレクトリに移動されます。ファイルの場合は、そのファイルがあることがわかります。交換済みそして
myscript
。はいtouch file.sh mv myscript *.sh
この
mv
コマンドはシェルによって拡張され、mv myscript file.sh
ファイル名が変更され、ファイルにfile.sh
含まれる可能性がある以前の内容を上書きします。現在のディレクトリに一致するファイルとディレクトリがある場合、セットの
*.sh
最後のエントリ(ロケールによる英数字の順序)がファイルかディレクトリであるかによって異なります。すべての場合において、シェルはmv myscript file1.sh file2.sh lastdir.sh
またはなどのワイルドカード文字を拡張しますmv myscript dir.sh file.sh
。- ディレクトリが最後のエントリの場合、シェルに一致するすべてのエントリはそのディレクトリに移動されます。
- ファイルが最後のプロジェクトの場合、
mv
複数のプロジェクトの名前を単一のターゲットに変更できないため、コマンドはエラーで失敗します。 (エラーを報告しなかったため、mv
このような状況は発生しなかったようです。)
最後に、現在のディレクトリにパターンと一致するものがない場合、
*.sh
シェルはパターンを保持してmv
それをリテラルに渡すことができます。この場合、コマンドはファイル名を最初の文字としてアスタリスクを含むmv
リテラル文字列に置き換えます。*.sh
私はタスク#2が何が起こっているのかを識別する可能性が最も高く、パターンに一致するファイルの元の内容を失うことになると思います*.sh
。