Php 如何按文件大小匹配文件并相应重命名?
我有两个名称不匹配的图像目录,但大部分是匹配的图像Php 如何按文件大小匹配文件并相应重命名?,php,bash,shell,comparison,rename,Php,Bash,Shell,Comparison,Rename,我有两个名称不匹配的图像目录,但大部分是匹配的图像 Dir 1 Size | Dir 2 Size --------------------------------------------------- img1.jpg 508960 | a_image_name.jpg 1038644 img2.jpg 811430 | another_image_name.jpg 396240 ... ... |
Dir 1 Size | Dir 2 Size
---------------------------------------------------
img1.jpg 508960 | a_image_name.jpg 1038644
img2.jpg 811430 | another_image_name.jpg 396240
... ... | ... ...
img1000.jpg 602583 | image_name.jpg 811430
... ... |
img2000.jpg 396240 |
第一个目录有更多图像,但名称错误。第二个目录的名称正确,但顺序与第一个目录不对应
我想通过比较文件大小(或其他方式)和目录2来重命名目录1中的文件。在上面的示例中,img2.jpg将重命名为image_name.jpg,因为两者具有相同的文件大小
你能给我指一下正确的方向吗
最好是通过应用程序(Mac)、shell或php。也许更明智的做法是使用文件哈希而不是使用文件大小 简而言之:使用glob(),获取dir1中的文件列表,迭代,创建md5哈希(md5()+file_get_contents()),存储在数组中,使用哈希作为键,文件名作为值。 对dir2做同样的操作 如果array2重命名文件中存在具有相同哈希的条目,则迭代array1 代码如下:(未测试,未优化)
也许更明智的做法是使用文件的哈希值,而不是使用文件大小 简而言之:使用glob(),获取dir1中的文件列表,迭代,创建md5哈希(md5()+file_get_contents()),存储在数组中,使用哈希作为键,文件名作为值。 对dir2做同样的操作 如果array2重命名文件中存在具有相同哈希的条目,则迭代array1 代码如下:(未测试,未优化)
这是我的解决方案,它根据文件大小重命名dir1中的文件 第1部分的内容:
-rw-r--r-- 1 haiv staff 10 Aug 16 13:18 file1.txt
-rw-r--r-- 1 haiv staff 20 Aug 16 13:18 file2.txt
-rw-r--r-- 1 haiv staff 30 Aug 16 13:18 file3.txt
-rw-r--r-- 1 haiv staff 205 Aug 16 13:18 file4.txt
(注意,第五列存储文件大小。)和dir2的内容:
-rw-r--r-- 1 haiv staff 30 Aug 16 13:18 doc.txt
-rw-r--r-- 1 haiv staff 205 Aug 16 13:18 dopey.txt
-rw-r--r-- 1 haiv staff 20 Aug 16 13:18 grumpy.txt
-rw-r--r-- 1 haiv staff 10 Aug 16 13:18 happy.txt
创建文件调用~/rename.awk(是的,从主目录创建,以避免污染dir1或dir2):
现在,将cd放入dir1(如果要重命名dir1中的文件),并发出以下命令:
$ awk -f ~/rename.awk <(ls -l ../dir2) <(ls -l)
对结果满意后,通过管道将上述命令传递给sh以执行更改:
$ awk -f ~/rename.awk <(ls -l ../dir2) <(ls -l) | sh
$awk-f~/rename.awk这是我的解决方案,它根据文件大小在dir1中重命名文件
第1部分的内容:
-rw-r--r-- 1 haiv staff 10 Aug 16 13:18 file1.txt
-rw-r--r-- 1 haiv staff 20 Aug 16 13:18 file2.txt
-rw-r--r-- 1 haiv staff 30 Aug 16 13:18 file3.txt
-rw-r--r-- 1 haiv staff 205 Aug 16 13:18 file4.txt
(注意,第五列存储文件大小。)和dir2的内容:
-rw-r--r-- 1 haiv staff 30 Aug 16 13:18 doc.txt
-rw-r--r-- 1 haiv staff 205 Aug 16 13:18 dopey.txt
-rw-r--r-- 1 haiv staff 20 Aug 16 13:18 grumpy.txt
-rw-r--r-- 1 haiv staff 10 Aug 16 13:18 happy.txt
创建文件调用~/rename.awk(是的,从主目录创建,以避免污染dir1或dir2):
现在,将cd放入dir1(如果要重命名dir1中的文件),并发出以下命令:
$ awk -f ~/rename.awk <(ls -l ../dir2) <(ls -l)
对结果满意后,通过管道将上述命令传递给sh以执行更改:
$ awk -f ~/rename.awk <(ls -l ../dir2) <(ls -l) | sh
$awk-f~/rename.awk这是一个很好的答案,但是,您可以使用md5_file($file)而不是md5(file_get_contents($file)),我假设它存在,但老实说,我懒得看手册;)顺便说一句,当然没有必要构建2个阵列。这是一个很好的答案,但是,您可以只使用md5_file($file)而不是md5(file_get_contents($file))。我认为这是存在的,但老实说,我懒得看手册;)顺便说一句,当然没有必要构建2个阵列