フォルダを移動して同時に再作成するには?

フォルダを移動して同時に再作成するには?

statisticsデータファイルが定期的に保存されるUbuntuサーバーにフォルダがあります。新しいファイルを保存するためにフォルダを再作成するときにフォルダの名前を変更するにはどうすればよいですかstatisticsbackup-xxstatistics

フォルダ内のファイルはstatisticsPHPによって生成されます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新しいシンボリックリンクを作成する前に既存のシンボリックリンクを削除してパスが存在しない小さな時間を残すため、適切ではありません。mv -T新しいシンボリックリンクでGNU coreutilsを使用できます。

new_dir="statistics-$(date +%Y%m%d)"
mkdir "$new_dir"
ln -s statistics.new
mv -Tf statistics.new statistics

おすすめ記事