我正在Linux中寻找某种逻辑,可以将同名文件放在目录或文件系统中。
例如我创建了一个文件abc.txt
,所以下次如果有任何进程创建了abc.txt
,它应该自动检查并创建名为abc.txt.1
的文件,然后下一次abc.txt.2
等等...
有没有办法做到这一点。
也欢迎使用任何逻辑或第三方工具。
答案 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