我从一个网站下载了很多文件(~10,000),其中大部分是一堆无用的html,都说同样的事情。但是,这个大海捞针中有一些文件具有有用的信息(因此文件相当不同),我需要一种快速的方法将这些文件与其他文件分开。我知道我可以逐个浏览所有文件并使用cmp与模板进行比较,看看它们是否相同,并删除它们。但是,这很慢。有更快的方法吗?我不介意我的回收率是否只有99%。
答案 0 :(得分:1)
这个列出了作为参数传递的树中的唯一文件:
#!/bin/bash
declare -A uniques
while IFS= read -r file; do
[[ ! "${uniques[${file%% *}]}" ]] && uniques[${file%% *}]="${file##* }"
done< <(find "$1" -type f -exec md5sum -b "{}" \;)
for file in ${uniques[@]}; do
echo "$file"
done
非常感谢使用md5sum的更好方法的三重奏!
以前的版本:
#!/bin/bash
declare -a files uniques
while IFS= read -r -d $'\0' file; do
files[${#files[@]}]="$file"
done< <(find "$1" -type f -print0)
uniques=( ${files[@]} )
for file in "${files[@]}"; do
for unique in "${!uniques[@]}"; do
[[ "$file" != "${uniques[$unique]}" ]] && cmp -s "$file" "${uniques[$unique]}" && && unset -v uniques[$unique]
done
done
for unique in "${uniques[@]}"; do
echo "$unique"
done
答案 1 :(得分:0)
假设所有文件都在当前目录中或下面,并且模板位于父目录中,并且文件名没有空格:
find . -type f -print | while read -r filename; do
if ! cmp --quiet $filename ../template; then
echo rm $filename
fi
done
如果您对此有效,请删除“echo”。