ディレクトリの検査と作成のためのシェルコマンド

ディレクトリの検査と作成のためのシェルコマンド

私はいくつかの呼び出し/実行したいRubyスクリプトを書いています。シェルコマンド

私が実行したいシェルコマンドは 'という名前のディレクトリを確認する必要があります。tmp'/var/lib/mysql/それが存在するか?

  • 存在する場合は、内部のすべてのファイル(サブディレクトリとファイルを含む)を削除します/var/lib/mysql/tmp/

  • 存在しない場合は作成してください。

ポリスチレンrootユーザーのみがアクセス可能/var/lib/mysql/

ディレクトリが作成されることはわかっていますが、mkdirわかりません。コマンドを使用してディレクトリが存在することを確認する方法

全体的に、上記のシナリオを実装するには、いくつかのシェルコマンドが必要です。アプローチが優雅になるほど良いです。これは、Rubyスクリプト内でシェルコマンドを実行するからです。

誰でも私を助けることができますか?

答え1

はい

 [ -d /var/lib/mysql/tmp ] || mkdir /var/lib/mysql/tmp

何をお探しですか?man test詳細より。

または両方の目標を達成してください。

 _DIR=/var/lib/mysql/tmp
 [ -d ${_DIR} ] && rm -rf ${_DIR}
 mkdir ${_DIR}

答え2

次の2つのシェルコマンドでこの問題を解決できます。

mkdir -p  /var/lib/mysql/tmp/    # create directories (that don't exist, yet)
rm    -rf /var/lib/mysql/tmp/*   # delete all files and sub-directories

注:各行の前に次のように入力する必要があります。sudoRubyスクリプトを有効にして、root権限でシェルコマンドを実行します。しかし、sudoを正しく設定するのは難しいかもしれません。


これ-pオプションをmkdirに追加するディレクトリが存在するかどうかをテストする必要はありません。

-p 必要に応じて中間ディレクトリを作成します。このオプションは
          指定されていません。各オペランドのフルパスプレフィックスは次のようになります。
          存在する。一方、このオプションを指定するとエラーは発生しません。
          ディレクトリがオペランドとして提供された場合に報告されます。
          存在する。中間ディレクトリは権限で作成されます。
          現在umaskによって修正された「rwxrwxrwx」(0777)ビット、
          また、所有者に対する書き込みおよび検索権限もあります。

答え3

使用できる

test -d /var/lib/mysql/tmp && rm -rf /var/lib/mysql/tmp/* || mkdir /var/lib/mysql/tmp

ただし、Ruby独自の組み込み関数を使用してディレクトリが存在することを確認し、rm …テスト結果に基づいてorを呼び出すことをお勧めします。mkdir …

関連情報