我曾使用 rdfind 删除重复文件。它会生成一个results.txt
文件。该文件显示了它未删除的第一个重复文件,然后显示了已删除的所有重复文件的列表。以下是该文本文件的一个示例。
DUPTYPE_FIRST_OCCURRENCE 8644 2 27882216 2065 49681972 3
/media/r/WDE4/BU/Downloads/03.mp4
DUPTYPE_WITHIN_SAME_TREE -8644 2 27882216 2065 38020226 3
/media/r/WDE4/g5/Downloads/03.mp4
DUPTYPE_WITHIN_SAME_TREE -8644 2 27882216 2065 55051289 3
/media/r/WDE4/BUg6/WhatsApp/WA.mp4
DUPTYPE_WITHIN_SAME_TREE -8644 1 27882216 2065 18613496 3
/media/r/WDE4/hl/CCWA0002.mp4
DUPTYPE_WITHIN_SAME_TREE -8644 2 27882216 2065 38021426 3
/media/r/WDE4/g5/Downloads/ZZ2.mp4
DUPTYPE_WITHIN_SAME_TREE -8644 2 27882216 2065 48497985 3
/media/r/WDE4/BUg60/WhatsApp/2.mp4
DUPTYPE_FIRST_OCCURRENCE 8424 2 30668643 2065 49682079 3
/media/r/WDE4/BU/Downloads/zzz.zip
DUPTYPE_WITHIN_SAME_TREE -8424 0 30668643 2065 18612483 3
/media/r/WDE4/zzz.zip
DUPTYPE_WITHIN_SAME_TREE -8424 2 30668643 2065 38020027 3
/media/r/WDE4/g5/Downloads/zz22.zip
DUPTYPE_FIRST_OCCURRENCE 8491 2 30672140 2065 49682078 3
/media/r/WDE4/BU/Downloads/z3.zip
DUPTYPE_WITHIN_SAME_TREE -8491 2 30672140 2065 38020084 3
/media/r/WDE4/g5/Downloads/One.zip
DUPTYPE_WITHIN_SAME_TREE -8491 1 30672140 2065 18612482 3
/media/r/WDE4/C/One2.zip
DUPTYPE_FIRST_OCCURRENCE 70405 3 30695973 2065 26739252 3
/media/r/WDE4/WDE/LGFULL12/D/C.mp4
DUPTYPE_WITHIN_SAME_TREE -70405 2 30695973 2065 29886532 3
/media/r/WDE4/WDE/LGR40/C.mp4
DUPTYPE_FIRST_OCCURRENCE 195982 2 30953302 2065 49172850 3
/media/r/WDE4/WDEX/P/d/MVI_1762.AVI
DUPTYPE_WITHIN_SAME_TREE -195982 2 30953302 2065 49172073 3
/media/r/WDE4/WDEX/P/zMVI_1762.AVI
DUPTYPE_WITHIN_SAME_TREE -195982 2 30953302 2065 49173627 3
/media/r/WDE4/WDEX/P/MVI_1762.AVI
DUPTYPE_WITHIN_SAME_TREE -195982 2 30953302 2065 49176978 3
/media/r/WDE4/WDEX/G/MVI_1762.AVI
DUPTYPE_FIRST_OCCURRENCE
每一行都以仍然存在的文件或DUPTYPE_WITHIN_SAME_TREE
已被删除的文件开头。
我想提供一个文件夹名称,并让所有文件夹恢复其原始文件。例如,假设/media/r/WDE4/WDEX/P
所有 P 文件夹都将恢复其原始文件 - 在本例中为MVI_1762.AVI
和zMVI_1762.AVI
。如果我要求 ,/media/r/WDE4
那么所有内容都将恢复。
请注意,列表按大小排序,因此P
整个results.txt
文件中可能有许多属于的文件。也不rdfind
使用实际文件名来查找重复项。
一些伪代码:
loop
Look for a FIRST line
Save that lines file's details as X
Look at every TREE line
If it contains the supplied path
copy the file X to the supplied path
rename the file to the name in this TREE line
endloop
谢谢。
答案1
只需简单的 bash 就足够了:
src=""
cat results.txt | while { read op o1 o2 o3 o4 o5 o6 file ; } do
if [ "$op" == "DUPTYPE_FIRST_OCCURRENCE" ] ; then
src="$file"
elif [ "$op" == "DUPTYPE_WITHIN_SAME_TREE" ] ; then
echo "Copying " "$src" " to " "$file"
cp "$src" "$file"
else
echo "ignoring $op"
fi
done