名前を変更しようとすると、ファイルが失われる可能性があります。

名前を変更しようとすると、ファイルが失われる可能性があります。

私はaというスクリプトを生成し、実行するためにmyscriptaを実行しました。chmod +x myscript実行しようとしましたが、拡張機能を忘れてしまったことにmyscript気づきました。.sh

したがって、私のシェルで次のコマンドを実行しますbash

mv myscript *.sh

...チャジャン、ファイルはもう存在しません。名前で検索して過去1時間に変更されたすべてのファイルのリストを取得しましたが、ファイルが見つかりませんでした。どこに行きましたか?修理する必要がある他の損傷はありますか?

ベストアンサー1

*.sh現在のディレクトリのパターンに一致する少なくとも1つのディレクトリ、または正確に1つのファイルがある可能性があります。

  1. ディレクトリの場合は、そのディレクトリのファイルがmyscript破損していないことを確認できます。はい

    mkdir dir.sh
    mv myscript *.sh
    

    このmvコマンドはシェル拡張され、ファイルがmv myscript dir.shそのディレクトリに移動されます。

  2. ファイルの場合は、そのファイルがあることがわかります。交換済みそしてmyscript。はい

    touch file.sh
    mv myscript *.sh
    

    このmvコマンドはシェルによって拡張され、mv myscript file.shファイル名が変更され、ファイルにfile.sh含まれる可能性がある以前の内容を上書きします。

  3. 現在のディレクトリに一致するファイルとディレクトリがある場合、セットの*.sh最後のエントリ(ロケールによる英数字の順序)がファイルかディレクトリであるかによって異なります。すべての場合において、シェルはmv myscript file1.sh file2.sh lastdir.shまたはなどのワイルドカード文字を拡張しますmv myscript dir.sh file.sh

    • ディレクトリが最後のエントリの場合、シェルに一致するすべてのエントリはそのディレクトリに移動されます。
    • ファイルが最後のプロジェクトの場合、mv複数のプロジェクトの名前を単一のターゲットに変更できないため、コマンドはエラーで失敗します。 (エラーを報告しなかったため、mvこのような状況は発生しなかったようです。)
  4. 最後に、現在のディレクトリにパターンと一致するものがない場合、*.shシェルはパターンを保持してmvそれをリテラルに渡すことができます。この場合、コマンドはファイル名を最初の文字としてアスタリスクを含むmvリテラル文字列に置き換えます。*.sh

私はタスク#2が何が起こっているのかを識別する可能性が最も高く、パターンに一致するファイルの元の内容を失うことになると思います*.sh

おすすめ記事