2014-02-11 37 views
1

我需要将两个以分隔符分隔的变量列表传递给BASH中的命令。我偶然从SD卡中删除了我女朋友的文件。我使用dd克隆了它的图像,并使用了Sleuth Kit来恢复已删除文件的inode编号和名称。在BASH中将两个以分隔符分隔的变量列表配置为新命令

fls -d -r bckup_irmasSD1.img | awk 'gsub(/\t|.*\*/,"")' | less 

这给了我一个例子输出:

6689308:DCIM/Camera/2014-02-05 20.51.30.jpg 
6689560:DCIM/Camera/2013-08-10 16.37.44.jpg 
6689563:DCIM/Camera/2013-08-10 16.37.52.jpg 
6689566:DCIM/Camera/2013-09-14 19.00.06.jpg 
6689567:DCIM/Camera/_I966F~2.MP4 
29211:Android/data/com.google.android.apps.maps/cache/_ACHE_~8.M 
29298:Android/data/com.google.android.apps.maps/cache/_ACHE_~2.6 
29301:Android/data/com.google.android.apps.maps/cache/cache_vts_GMM.7 
29304:Android/data/com.google.android.apps.maps/cache/cache_vts_GMM.8 
73224:bluetooth/DSC00360.jpg 
73227:bluetooth/DSC00360_2.jpg 
14728713:.downloadTemp/1616021_716182491801349_1111393555_n.mp4 
14728718:.downloadTemp/1616117_10151911525912011_1690760246_n.mp4 
18898441:download/1595926_47757 
18898445:download/1614824_234800313358133_914357470_n.mp4 
18898449:download/_24316~1.MP4 

要恢复由inode编号已删除的文件,你可以使用命令行工具ICAT:

icat -d /tmp/disk.img 18898449 > /recover/download/_24316~1.MP4 

我怎样才能管这干净地命令恢复所有文件?

回答

4
fls -d -r bckup_irmasSD1.img | 
awk 'gsub(/\t|.*\*/,"")' | 
while IFS=: read -r inode filename; do 
    mkdir -p /recover/"${filename%/*}" 
    icat -d /tmp/disk.img $inode > /recover/"$filename" 
done 
+0

这是完美的,但我不知道如何修改它以创建目录,如果它不存在。这里有一个帖子: http://stackoverflow.com/questions/4906579/how-to-use-bash-to-create-a-folder-if-it-doesnt-already-exist 我希望那些信息可以做到。我不确定我是怎么看的。 –

+0

'mkdir -p“$(dirname”$ filename“)”' –

+0

使用mkdir -p。现在编辑... –

2

你可以使用awk再次分裂你的线,然后打电话给你的命令:

fls -d -r bckup_irmasSD1.img | awk 'gsub(/\t|.*\*/,"")' > indoes.txt 
awk -F: '{system("icat -d " $1 " > " #2}' inodes.txt 

确认没有您的文件名中包含:买你的女朋友一些花!

+1

建议购买鲜花+1,但没有办法就够了! –

相关问题