
Ubuntu サーバーに、データ ファイルが定期的に保存される というフォルダーがあります。フォルダーを再作成しながら、新しいファイルを保存できるようにフォルダーstatistics
の名前を変更するにはどうすればよいですか?statistics
backup-xx
statistics
フォルダー内のファイルはstatistics
PHP によって作成されますfile_put_contents
。
フォルダー内には多くのファイルがあるため、フォルダーの名前を変更することをお勧めしますstatistics
。
答え1
方法がない原子的にディレクトリを別のディレクトリに置き換えます。古いディレクトリを移動して新しいディレクトリを作成できます。
mv statistics backup-xx
mkdir statistics
しかし、これにより、存在しない小さな時間枠が残りますstatistics
。何らかのプロセスがいつでもディレクトリにファイルをドロップする可能性がある場合には、これが問題になります。
ディレクトリを効率的にアトミックに置き換えるには、シンボリック リンクを使用する必要があります。名前に先頭からの期間が含まれるディレクトリを作成します。
mkdir "statistics-$(date +%Y%m%d)"
(またはディレクトリの命名規則を選択します)。現在の場所への固定の名前を持つシンボリック リンクを作成します。
ln -s … statistics
ディレクトリを置き換えるには、まず新しいディレクトリと新しいシンボリック リンクを作成し、それを移動して古いシンボリック リンクを上書きします。mv
シンボリック リンクのプレーンもプレーンもln -s
これを行わないことに注意してください。これらはターゲット ディレクトリ内にエントリを作成します。GNU coreutils もln -snf
適していません。新しいシンボリック リンクを作成する前に既存のシンボリック リンクを削除するため、パスが存在しない短い時間枠が残ります。新しいシンボリック リンクには GNU coreutils を使用できますmv -T
。
new_dir="statistics-$(date +%Y%m%d)"
mkdir "$new_dir"
ln -s statistics.new
mv -Tf statistics.new statistics
答え2
mv statistics backup-xx && mkdir statistics
statistics
これにより、既存のディレクトリの名前が に変更されbackup-xx
、成功した場合は新しいディレクトリの作成が続行されますstatistics
。
よりアトミックな操作を行うには、ディレクトリstatistics-001
(または、001
適切な形式で今日の日付に置き換えるなど) と、そのディレクトリへのシンボリック リンクを作成することを検討してくださいstatistics
。
mkdir statistics-001
ln -s statistics-001 statistics
新しいデータがクリーンなディレクトリに入るようにこれを「ローテーション」したい場合は、まずディレクトリを作成し、statistics
そのディレクトリへのリンクを再作成します。
mkdir statistics-002
ln -sf statistics-002 statistics
mv statistics-001 backup-001
statistics
こうすることで、ディレクトリ (つまり、このシンボリック リンクが指すディレクトリ)に書き込むプログラムは、必ずそのディレクトリを見つけられるようになります。
指すディレクトリに特別な権限または所有権を設定する必要がある場合はstatistics
、リンクを(再)作成する前にこれらを設定してください。
1あるいは、このようにすれば、プログラムが実行される時間はそれなし有効なターゲット ディレクトリは、標準の Unix ツールを使用して、実質的に可能な限り最小化されます。
答え3
ディレクトリの名前を変更しないでください。ディレクトリにはたくさんのファイルがあるため、名前を変更したいとおっしゃいました。これを望む唯一の理由は、ファイルのコピーに時間がかかりすぎるからです。しかし、動くファイルが同じファイル システム上の場所に移動されている限り、ファイルの変更 (つまり、名前の変更) は瞬時に行われます。ファイル システムを変更する場合は、ディレクトリを移動するかその内容を移動するかに関係なくmv
、同じだけの時間がかかるcp
ため、これが必要な操作であると考えられます。
だから、次のようにしてください:
mkdir backup-xx && mv statistics/* backup-xx
隠しファイルも取得する必要がある場合は、次の操作を実行できます。
mkdir backup-xx && mv statistics/* statistics/.* backup-xx
または、使用する場合bash
:
shopt -s dotglob; mkdir backup-xx && mv statistics/* statistics/.* backup-xx
この方法では、ディレクトリは常に存在しますが、その内容を簡単かつ高速な操作で移動できます。
答え4
フォルダー自体を移動するのではなく、統計フォルダーの内容を新しく作成したディレクトリに移動することができます。フォルダー全体を移動する場合は、ディレクトリの権限を変更するために別のコマンドを実行する必要があります。
mkdir -p <path>/backup-xxx
mv statistics/* <path>/backup-xxx/.