我需要将两个分米分隔变量的列表通过管道传输到 BASH 中的命令。 我不小心从女朋友的SD卡中删除了她的文件。 我使用dd克隆了它的映像,并使用侦探工具包来恢复已删除文件的索引节点编号和名称。
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
要按索引节点号恢复已删除的文件,可以使用命令行工具 icat:
icat -d /tmp/disk.img 18898449 > /recover/download/_24316~1.MP4
如何将其干净地传送到命令以恢复所有文件?
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
你可以再次使用 awk
来拆分你的行,然后调用你的命令:
fls -d -r bckup_irmasSD1.img | awk 'gsub(/t|.**/,"")' > indoes.txt
awk -F: '{system("icat -d " $1 " > " #2}' inodes.txt
确保你的文件名都不包含:
,并给你的女朋友买一些花!