Goo*_*bot 9 bash shell-script rename files
我statistics在 Ubuntu 服务器中调用了一个文件夹,其中定期存储数据文件。如何在重新创建可用于存储新文件的文件statistics夹backup-xx时将文件夹重命名statistics为?
文件statistics夹中的文件是由 PHP 创建的file_put_contents。
我更喜欢重命名文件夹,因为文件夹中有很多文件statistics。
Gil*_*il' 12
没有办法用另一个目录原子地替换一个目录。您可以移动旧目录然后创建一个新目录:
mv statistics backup-xx
mkdir statistics
Run Code Online (Sandbox Code Playgroud)
但这会留下一个statistics不存在的时间窗口。如果某个进程可能随时删除目录中的文件,这就是一个问题。
要有效地自动替换目录,您需要使用符号链接。创建一个目录,其名称包含从开始的时间段:
mkdir "statistics-$(date +%Y%m%d)"
Run Code Online (Sandbox Code Playgroud)
(或者您想选择目录命名约定)。创建一个指向当前位置的固定名称的符号链接:
ln -s … statistics
Run Code Online (Sandbox Code Playgroud)
要替换目录,首先创建一个新目录和一个新的符号链接,然后移动它以覆盖旧的符号链接。请注意,mv符号链接上的普通或普通ln -s都不会这样做:它们会在目标目录中创建一个条目。GNU coreutilsln -snf也不适合,因为它在创建新符号链接之前删除了现有符号链接,这会留下一个很小的时间窗口,在此期间路径不存在。您可以mv -T在新的符号链接上使用 GNU coreutils 。
new_dir="statistics-$(date +%Y%m%d)"
mkdir "$new_dir"
ln -s statistics.new
mv -Tf statistics.new statistics
Run Code Online (Sandbox Code Playgroud)
mv statistics backup-xx && mkdir statistics
Run Code Online (Sandbox Code Playgroud)
这会将现有statistics目录重命名为backup-xx,如果成功,它将继续创建一个新statistics目录。
对于更原子的操作,请考虑创建一个目录statistics-001(或类似的,可能通过以001合适的格式替换为今天的日期),以及一个名为 的符号链接statistics:
mkdir statistics-001
ln -s statistics-001 statistics
Run Code Online (Sandbox Code Playgroud)
当你想“旋转”它以便新数据进入一个干净的目录时,首先创建目录,然后重新创建statistics指向它的链接:
mkdir statistics-002
ln -sf statistics-002 statistics
mv statistics-001 backup-001
Run Code Online (Sandbox Code Playgroud)
这样,任何写入statistics目录(即此符号链接指向的目录)的程序将永远不会1找不到它。
如果您需要在statistics指向的目录上设置特殊权限或所有权,请在(重新)创建链接之前设置这些。
1或者更确切地说,通过这种方式,使用标准 Unix 工具尽可能地减少程序没有有效目标目录的时间。
| 归档时间: |
|
| 查看次数: |
2279 次 |
| 最近记录: |