web-dev-qa-db-ja.com

ディレクトリをチェックして作成するためのシェルコマンド

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

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

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

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

P.S。rootユーザーのみが/var/lib/mysql/にアクセスできます)

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

全体として、上記のシナリオを実現するためにいくつかのシェルコマンドが必要です。また、よりエレガントな方法でより良いを実行します。 Rubyスクリプトのシェルコマンド。

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

2
Mellon

です

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

あなたが探しているものは?見る man test 詳細については。

または、両方の目標を達成するには:

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

次の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

注:Rubyスクリプトでシェルコマンドを実行できるようにするには、各行の前に Sudo を付ける必要がある場合がありますroot権限で。ただし、Sudoを正しく設定するのは難しい場合があります。


-pオプションからmkdir ディレクトリの存在をテストする必要がなくなります:

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

あなたが使うことができます

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

ただし、Ruby独自のビルトインを使用してディレクトリが存在するかどうかを確認し、テストの結果に応じてrm …またはmkdir …を呼び出すことをお勧めします。

1