linux服务器从文件名创建符号链接

linux服务器从文件名创建符号链接,linux,bash,shell,Linux,Bash,Shell,我需要编写一个shell脚本作为cron任务运行,或者最好是在特定文件夹中创建文件时运行 我有一个传入和一个传出文件夹(它们将用于记录邮件)。将创建具有以下代码的文件 bmo-001-012-dfd-11用于输出,012-dfd-003-11用于输入。我需要过滤项目/客户代码(012 dfd),然后将其放在特定项目文件夹中的文件夹中 项目文件夹位于/projects中,格式为012 dfd。我需要在项目的传入或传出文件夹中创建符号链接,从而在常规传入和传出文件夹中找到正确的文件 /incomin

我需要编写一个shell脚本作为cron任务运行,或者最好是在特定文件夹中创建文件时运行

我有一个
传入
和一个
传出
文件夹(它们将用于记录邮件)。将创建具有以下代码的文件

bmo-001-012-dfd-11
用于输出,
012-dfd-003-11
用于输入。我需要过滤项目/客户代码(
012 dfd
),然后将其放在特定项目文件夹中的文件夹中

项目文件夹位于
/projects
中,格式为
012 dfd
。我需要在项目的传入或传出文件夹中创建符号链接,从而在常规
传入
传出
文件夹中找到正确的文件

/incoming/012-dfd-003-11.pdf -> /projects/012-dfd/incoming/012-dfd-003-11.pdf
/outgoing/bmo-001-012-dfd-11.pdf -> /projects/012-dfd/outgoing/bmo-001-012-dfd-11.pdf
所以我的问题是

  • 将文件添加到传入文件夹或传出文件夹时,如何运行脚本
  • 此外,与每5分钟运行一次cron任务相比,在文件修改时运行是否有任何相关的缺点
  • 如何获取最近(自上次运行脚本以来)文件的文件名
  • 如何从文件名中提取代码
  • 如何使用代码在所需文件夹中创建符号链接

  • 编辑:我最后做的事

    while inotifywait outgoing; do find -L . -type l -delete; ls outgoing | php -R '
    if(
        preg_match("/^\w{3}-\d{3}-(\d{3}-\w{3})-\d{2}(.+)$/", $argn, $m)
        && $m[1] && (file_exists("projects/$m[1]/outgoing/$argn") != TRUE)
    ){
        `ln -s $(pwd)/outgoing/$argn projects/$m[1]/outgoing/$argn;`;
    }
    '; done;
    
    这非常有效-清理已删除的符号链接(使用
    find-L.-typel-delete
    ),但我更愿意这样做,而不需要调用php。我只是还不太了解巴什

    每5分钟

    如果5分钟的延迟不是问题,我会选择cron工作(它更简单,更灵活)

    如何获取最近(自上次运行脚本以来)文件的文件名

    如果您的脚本每5分钟运行一次,那么您可以使用ls或find命令判断在这段时间(现在-5分钟)创建的所有文件都是newso,您可以列出这些文件

    如何从文件名中提取代码

    您可以使用sed命令

    如何使用代码在所需文件夹中创建符号链接


    获得所需的文件名后,可以使用ln-s命令创建符号链接

    任务分解的一些近似答案:

  • 在linux上,使用,可能通过它的一个或
  • 见上文
  • 假设可以从示例中按位置提取项目名称(这意味着项目名称不仅遵循严格的7个字符格式,而且在传出文件中它前面的内容也遵循严格的7个字符格式):

    • mkdir-p/projects/$i/incoming/
      创建目录
      /projects/012 dfd/incoming/
      如果
      i=012 dfd
    • ln-s/incoming/foo/projects/$i/incoming/foo
      创建从后一个参数到先前存在的前一个文件的符号链接
      /incoming/foo
  • How would I make my script run when a file is added to either incoming or outgoing folder
        Additionally, is there any associated disadvantages with running upon file modification compared with running as cron task
    
    echo `basename /incoming/012-dfd-003-11.pdf` | cut -c 1-7
    012-dfd
    echo `basename /outgoing/bmo-001-012-dfd-11.pdf`| cut -c 9-15
    012-dfd