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