U 盘出问题了,U 盘上的照片读不出来,心里那个郁闷啊。 好在有万能的 Linux 可以帮忙。仅仅用下面的命令就将 U 盘上的照片恢复了。 注意,如果你也要恢复文件,需要将 /dev/sdc 替换为你实际的 U 盘设备。
1
2
3
4
5
sudo apt-get install testdisk
cd ~
mkdir recup_dir
sudo photorec /d recup_dir /dev/sdc
上面的 U 盘数据虽然恢复了,但是文件命名没有规律,不知道是什么时候拍摄的。 我就写了下面这段小脚本来将文件重命名为拍摄时间,比如 2018-04-14-856847.jpg。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Basename;
my $directory = './';
find(\&process_file, $directory);
sub process_file {
my $file = $_;
if (-f $file && $file =~ /\.jpe?g$/i) {
my $output = `exiftool -DateTimeOriginal -d '%Y-%m-%d' -SubSecTimeOriginal "$file"`;
my ($datetime,$subsecond);
if ($output =~ /.*Date\/Time Original\s+:\s*([-0-9]+).*/ms) {
$datetime = $1;
} else {
return;
}
if ($output =~ /.*Sub Sec Time Original\s+:\s*([-0-9]+).*/ms) {
$subsecond = $1;
} else {
return;
}
my $nfile = "$datetime-$subsecond.jpg";
print "$file to $nfile\n";
if (! -f $nfile) {
rename $file, $nfile;
}
}
}
将上面的代码报文为 rename-photo.pl, 保存在恢复出来的照片的目录 recup_dir 里面,然后执行 perl rename-photo.pl就大功告成了。