Unix在目录中创建多个具有相同名称的文件

时间:2020-07-10 18:17:26

标签: linux ubuntu unix linux-kernel archlinux

我正在Linux中寻找某种逻辑,可以将同名文件放在目录或文件系统中。

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

有没有办法做到这一点。

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

3 个答案:

答案 0 :(得分:1)

你问

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

(添加了强调)。为了自动获得这种效果,对于每个进程,无需进程的明确提供,就必须将其实现为包含文件的文件系统的功能。这样的文件系统称为versioning filesystems,尽管通常细节与您所描述的略有不同。然而,最重要的是,尽管此类文件系统适用于Linux,但它们都不是主流。据我所知,没有一个主要的Linux发行版提供发行版作为受发行版支持的选项。

虽然有些过时,另请参见Linux file versioning?

您可以通过自定义版本的C标准库来对许多程序进行近似估算,但这并不是万无一失的,您不应期望它具有通用性。

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

答案 1 :(得分:0)

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

# touch my_file{01..10}.txt

这将创建10个文件,从01开始一直到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

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

欢呼

答案 2 :(得分:0)

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

相关问题