ディレクトリ名を変数にどのように入れることができますか?

ディレクトリ名を変数にどのように入れることができますか?

データベースのバックアップを自動的に復元するシェルスクリプトを作成しています。このタスクの一部として、バックアップファイルを含むディレクトリの名前を知る必要があります。しかし、これは毎回変わります。

後で参照できるように、ディレクトリ名を変数に入れることはできますか?

例: 既定のディレクトリがあります。

/var/backups/db/

これには、名前が毎回変更される別のディレクトリもあります(例/var/backups/db/db_backup_109245_abc/:)。

db_backup_109245_abc後で参照できるように、変数のフルパスを含むディレクトリ名(たとえば)を取得するにはどうすればよいですか?

これには1つのディレクトリしかありません(プロセスの最初の部分でこれを保証します)、ディレクトリ名は毎回異なります。

答え1

さて、見つけました:

BackupDir=$(find /var/backups/db/* -maxdepth 0 -type d)

答え2

ディレクトリにサブディレクトリが1つしかない場合は、次を/var/backups/db使用します。

set -- /var/backups/db/*/
dirpath=$1

そのディレクトリのパス名を変数に割り当てますdirpath

ワイルドカードパターンの末尾にあるスラッシュは、パターンがディレクトリにのみ一致することを保証します。

failglobシェルオプション()を設定することもできますshopt -s failglob。そうすると、パターンが一致しない場合、シェルは診断メッセージを生成します。また、失敗時にスクリプトを終了することもできます。

shopt -s failglob
set -- /var/backups/db/*/ || exit 1
dirpath=$1

このコードの後に​​は、次のものもあります。みんなディレクトリパス名"$@"(複数の場合)

答え3

次の仮定を信じることができるとしましょう。

  • バックアッププレフィックスは常に「db_backup_」です。
  • 最後のバックアップディレクトリ(私が理解している場合は、探しているディレクトリ)には後日があります。

その後、このパスを使用できます

backup_path=$(ls -t /var/backups/db/ |grep db_backup_ | head -1)

関連情報