Ubuntuサーバーにstatistics
というフォルダーがあり、データファイルが定期的に保存されています。新しいファイルを保存するためにstatistics
フォルダーを再作成しながら、statistics
フォルダーの名前をbackup-xx
に変更するにはどうすればよいですか?
statistics
フォルダー内のファイルは、PHP file_put_contents
によって作成されます。
statistics
フォルダーには多くのファイルがあるため、フォルダーの名前を変更することをお勧めします。
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
ディレクトリ(つまり、このシンボリックリンクが指すディレクトリ)に書き込むプログラムは、1 それを見つけることができません。
statistics
が指すディレクトリに特別な権限または所有権を設定する必要がある場合は、リンクを(再)作成する前にこれらを設定してください。
1むしろ、このようにして、プログラムが有効なターゲットディレクトリであるなしである時間は、標準のUnixツールを使用して、可能な限り最小限に抑えられます。
アトミックディレクトリを別のディレクトリに置き換える方法はありません。古いディレクトリを移動してから、新しいディレクトリを作成できます。
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
ディレクトリの名前を変更しないでください。多くのファイルがあるので、ディレクトリの名前を変更する方がよいとおっしゃっていました。これが必要だと私が考えることができる唯一の理由は、ファイルのコピーに時間がかかりすぎるためです。ただし、ファイルが同じファイルシステム上の場所に移動されている限り、ファイルの移動(つまり、名前の変更)は瞬時に行われます。ファイルシステムを変更する場合、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
このようにして、ディレクトリは常にそこにありますが、その内容は単純で高速な操作で移動できます。
フォルダー自体を移動するのではなく、統計フォルダーの内容を新しく作成したディレクトリに移動できます。フォルダ全体を移動する場合は、別のコマンドを実行してディレクトリのアクセス許可を変更する必要があります。
mkdir -p <path>/backup-xxx
mv statistics/* <path>/backup-xxx/.