ファイルが存在するか自動統計を確認する

ファイルが存在するか自動統計を確認する

ファイルがbash行にある場合は、コマンドを実行します。

私が今やっていることは次のとおりです。

$ stat /last_dump.sql && mysql -D my_database < last_dump.sql

これは正しいことですか?

うまく動作しますが、統計レポートが出力されます。

  File: '/last_db.sql'
  Size: 42161       Blocks: 88         IO Block: 4096   regular file
Device: 26h/38d Inode: 108         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    me)   Gid: (    0/    me)
Access: 2016-06-08 08:07:15.886741191 +0000
Modify: 2016-06-08 08:07:06.218593606 +0000
Change: 2016-06-08 08:07:06.218593606 +0000
 Birth: -

どうやってできるかいいえこの統計レポートを表示しますか?

答え1

ファイルテスト演算子を使用することもできます。

[[ -e ./last_dump.sql ]] && mysql -D my_database < ./last_dump.sql

これらの演算子の詳細については、ここで確認できます。ファイルテスト演算子

ただし、使用を好む場合は、stat出力を次に送信できます/dev/null

stat ./last_dump.sql >/dev/null && mysql -D my_database < ./last_dump.sql

上記のコマンドは./現在のディレクトリを意味します。また、エラーが発生してもstatが完全に静かになるようにするには、または(同じ結果として)を/dev/null使用してエラーを移動することもできます。&>/dev/null>/dev/null 2>&1

答え2

この呼び出しは、statファイルの変更時間や権限などの基本的なシェルコマンドから取得できない情報を取得する場合にのみ役立ちます。ファイルが存在するかどうかをテストするには、このtestコマンドを使用します[。このコマンドはほとんどのシェルに組み込まれています。

if [ -e last_dump.sql ]; then mysql -D my_database < last_dump.sql; fi

test は、-e指定されたファイルが存在するかどうかをテストします。ファイルは、壊れたシンボリックリンクを含む任意のタイプにすることができます。通常のファイル(通常のファイルへのシンボリックリンクを含む)のみが必要な場合-f

以下を使用するにはいくつかの理由があります[ … ]stat

  • stat出力削除のみを呼び出すことは、ファイルが存在するかどうかをテストする難読化された方法です。コードを読む人(6ヶ月後など)を考えてみましょう。[ -e file ]コードは単に「fileそれが存在しますか?」と言いますが、呼び出しはstat「ファイルのメタデータをください」と言い、コードが存在するかどうかをテストするのは単なる副作用です。
  • [ … ]標準コマンドですが、statすべてのUnixバリアントには存在せず、互換性のないコマンドラインオプションがあります。この特定のケースではコマンドラインオプションを使用しないため、それほど悪くはありません。
  • stat外部コマンドなので、遅くなります。

&&「if」を意味するときもこの単語を使用しないでください。これも読みやすさがはるかに低いです。またset -e、(プログラムが中断された場合はシェルに終了するように指示)、存在しない場合は[ -e last_dump.sql ] && mysql …スクリプトを中断して実行し続けるため、非常に強力ではありません。last_dump.sqlif [ -e last_dump.sql ]; then …; fi

関連情報