【问题标题】:Unix create multiple files with same name in a directoryUnix在一个目录中创建多个同名文件
【发布时间】:2020-07-10 18:17:26
【问题描述】:

我正在寻找 linux 中的某种逻辑,我可以在其中将具有相同名称的文件放置在目录或文件系统中。

例如我创建了一个文件abc.txt,所以下次如果有任何进程创建abc.txt,它应该自动检查并创建名为abc.txt.1的文件,然后下次abc.txt.2等等......

有没有办法做到这一点。

也欢迎任何逻辑或第三方工具。

【问题讨论】:

  • 请注意abc.txtabc.txt.1 显然同名。你真正想做的事情似乎很清楚,但你用来向他人和(尤其是)向自己描述事物的词语很重要。
  • 这很快就会出现问题。指向文件的链接应该指向最新版本,还是指向创建文件时存在的版本?

标签: linux ubuntu unix linux-kernel archlinux


【解决方案1】:

你问,

例如我创建了一个文件 abc.txt,所以下次如果 any 处理 创建 abc.txt 它应该自动检查并将文件命名为 因为应该创建 abc.txt.1

(强调添加)。为了自动获得这样的效果,对于每个进程,在没有进程明确规定的情况下,它必须作为包含文件的文件系统的一个特性来实现。此类文件系统称为versioning filesystems,但通常细节与您描述的略有不同。然而,最重要的是,尽管 Linux 存在这样的文件系统,但它们都不是主流。据我所知,没有一个主要的 Linux 发行版甚至提供一个作为发行版支持的选项。

虽然有点过时,但另见Linux file versioning?

您也许可以通过 C 标准库的自定义版本为许多程序近似,但这不是万无一失的,您不应该期望它具有普遍的效果。

针对此类行为对单个进程进行编码将是完全不同的事情。打开每个新文件时,它需要检查现有文件并选择适当的名称。在这样做时,需要注意避免相关的竞争条件,但这是可以做到的。详细信息取决于您所使用的语言。

【讨论】:

    【解决方案2】:

    您可以使用 BASH 表达式来实现这一点。例如,如果我想创建 10 个文件都具有相同的名称,但具有唯一的数字值,我会执行以下操作:

    # touch my_file{01..10}.txt
    

    这将创建从 01 到 10 的 10 个文件。此方法也适用于按顺序循环文件或如果您还创建目录。

    现在,如果我正在阅读您的问题,您的问题是您是否移动文件或在目录中创建文件。您希望脚本自动为您创建一个新文件吗?如果是这种情况,那么只需使用测试,如果有文件移动该文件并标记它。就我个人而言,我使用时间戳来做到这一点。

    逻辑:

    # The [ -f ] tests if the file is present
    if [ -f $MY_FILE_NAME ]; then
        # If the file is present move the file and give it the PID
        # That way the name will always be unique
        mv $MY_FILE_NAME $MY_FILE_NAME_$$
        mv $MY_NEW_FILE .
    else
        # Move or make the file here
        mv $MY_NEW_FILE .
    fi
    

    如您所见,逻辑非常简单。希望这会有所帮助。

    干杯

    【讨论】:

      【解决方案3】:

      我不知道您的特定用例,但您可以尝试查看 logrotate: https://wiki.archlinux.org/index.php/Logrotate

      【讨论】:

        猜你喜欢
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多