将文件放在特定目录中时自动重命名文件

Nic*_*k.h 14 linux filesystems

将文件放在特定目录中时是否可以自动重命名文件?

例如,我有一个名为“dir0”的目录。我将一个名为“file1”的文件移动或复制到“dir0”。然后“file1”应该重命名为“file1_{current timestamp}”

Cal*_*leb 21

通常,您会在创建或移动文件时以编程方式执行此操作,但只要使用incron. 使用这样incrontab -e的行设置您的选项卡文件,当然还有您的路径:

/path/to/dir0 IN_MOVED_TO,IN_CREATE /path/to/script $@/$#
Run Code Online (Sandbox Code Playgroud)

然后在/path/to/script写一个快速重命名动作。请注意,脚本也会为您创建的新文件调用,因此它必须测试该文件是否已正确命名。在这个例子中,它检查文件名的最后部分是否有一个十位数的秒数,如果没有,它会添加它:

#!/bin/bash
echo $1 | grep -qx '.*_[0-9]\{10\}' || mv "$1" "$1_$(date +%s)"
Run Code Online (Sandbox Code Playgroud)

编辑:当我第一次写这篇文章时,我时间不够,无法弄清楚如何在bash这里进行模式匹配。Gilles 指出了如何在不调用 grep 的情况下使用 bash 中的 ERE 匹配来做到这一点:

#!/bin/bash
[[ ! ( $1 =~ _[0-9]{10}$ ) ]] && mv "$1" "$1_$(date +%s)"
Run Code Online (Sandbox Code Playgroud)


pbm*_*pbm 5

我认为这inotify是在这种情况下可以使用的工具。在 Debian 中有inoticoming用于执行文件创建操作的工具:

 inoticoming --foreground /path/to/directory mv {} {}-"`date`" \;
Run Code Online (Sandbox Code Playgroud)

{} 将替换为文件名。

我提供的命令不完整 - 它会导致循环,因为当文件被重命名时,它会被识别为新的,所以它会mv再次被编辑,依此类推。为了避免这种情况,--suffix如果您在重命名之前知道文件中的后缀是什么,您可以使用选项。