我有一个巨大的文件列表(超过48k的路径文件),我想为这些文件做一个符号链接
这是我的PHP代码:
$files=explode("\n","files.txt");
foreach($files as $file){
$file=trim($file);
@symlink($file,"/home/".$file."@".rand(1,80000).".txt");
}
问题是这个过程需要1个多小时
我考虑先检查文件是否存在然后再进行符号链接,所以我在php.net上进行了一些研究,并且首先出现了我想要的一些函数,如is_link()和readlink(),但是评论引起了我的注意:
有必要通知readlink仅适用于真实链接文件,如果此链接文件位于目录中,您无法检测并读取其内容,则is_link()函数将始终返回false并且readlink()将你试图做一个警告。
所以我制作了这个新代码:
$files=explode("\n","files.txt");
foreach($files as $file){
$file=trim($file);
if(!empty(readlink($file))){
@symlink($file,"/home/".$file."@".rand(1,80000).".txt");
}
}
现在的问题是:"没有符号链接文件!"
我怎样才能防止这个问题?我应该使用多线程还是有其他选项
答案 0 :(得分:0)
显然,您正在运行基于Linux的操作系统,而您的问题与文件系统有关。
在这种情况下,我建议创建bash脚本来读取file.txt并为所有这些创建符号链接。
良好的开端是:
所以你可以尝试这样的事情:
#!/斌/庆典
而阅读名称
做
#做你想要的名字 ln -s / full / path / to / the / file / $ name /path/to/symlink/ch_img
$name'.txt'
完成< file.txt
编辑:
一线解决方案:
同时读取名称; do ln -s / full / path / to / the / file / $ name / path / to / symlink / shuf -i 1-80000 -n 1 $ name'.txt';完成< file.txt
注意:将“file.txt”替换为文件的完整路径。如果出现任何问题,请在少量文件上进行测试。