Шифрование защищает вашу систему от автономного доступа, т. е. доступа к вашему оборудованию.
Если кто-то может получить доступ к вашему жесткому диску, смонтировать корневой раздел и восстановить ключи шифрования, ничто не мешает им расшифровать и смонтировать другие ваши разделы.
Следующий скрипт работает, устанавливая список позиционных параметров в список имен, соответствующих шаблону *' ('*')'
, т. е. все файлы с именами, которые содержат пробел, за которым следует скобка в конце, в текущем каталоге.
Сценарий использует двойной цикл для сравнения каждого имени со всеми остальными. Чтобы избежать сравнения некоторого имени A
с другим именем B
, а затем B
с A
, мы смещаем первый элемент списка в начале внешней итерации. Это также позволяет избежать проверки имени A
против самого себя.
Внутри внутреннего цикла мы удаляем круглые скобки в конце имен и сравниваем две полученные строки. Если строки совпадают, мы печатаем имена.
#!/bin/sh
set -- *' ('*')'
for name do
shift
for dup do
if [ "${name%% (*)}" = "${dup%% (*)}" ]; then
printf '"%s" <-> "%s"\n' "$name" "$dup"
fi
done
done
Несмотря на опоздание, я решил добавить небольшой сценарий Bash, который обрабатывает имена файлов с помощью Gawk. Он помечает множество дубликатов среди файлов в любом заданном каталоге. Обработка остается O (n^2 ), хотя пары файлов проверяются только один раз.
Запустите скрипт в интересующем каталоге, например, в каталоге, содержащем:
$ \ls -A -1
2323- (1236).suffix
23232(1234).suffix
23232 (1236).hsj
23232 (1236).suffix
hello(2001.10.29)fgh.ssh
hello(2002.10.29)fgh.ssh
23232(1236).suffix
23232(12 6).suffix
23232 (1286).suffix
23232 (1446).suffix
23232(3236).suffix
dwlkl(1234).sds
Теперь скрипт:
$ cat near_match.sh
#!/usr/bin/env bash
gawk '
{i++; a[i] = $0; next} # put files to check in array 'a'
END {
nfiles = i; # number of files to check
for (i = 1; i <= nfiles-1; i++) {
lblkarr1 = split(a[i], blkarr1, "[()]");
lparr1 = split(blkarr1[2], parr1, "");
for (j = i+1; j <= nfiles; j++) {
lblkarr2 = split(a[j], blkarr2, "[()]");
lparr2 = split(blkarr2[2], parr2, "");
mismatch = 0;
if ("x"blkarr1[1]"x" == "x"blkarr2[1]"x" && "x"blkarr1[3]"x" == "x"blkarr2[3]"x" && lparr1 == lparr2) {
for (k=1; k<=length(blkarr1[2]); k++) { if (parr1[k] != parr2[k]) mismatch++ };
if (mismatch == 1) printf "dupes: %s <--> %s\n", a[i], a[j];
}
}
}
}' <<< $(\ls -A -1 -- *"("*")"*)
exit 0
Сделайте скрипт исполняемым и запустите его без аргументов.
$ near_match.sh
dupes: 23232(1234).suffix <--> 23232(1236).suffix
dupes: 23232 (1236).suffix <--> 23232 (1286).suffix
dupes: hello(2001.10.29)fgh.ssh <--> hello(2002.10.29)fgh.ssh
dupes: 23232(1236).suffix <--> 23232(12 6).suffix
dupes: 23232(1236).suffix <--> 23232(3236).suffix
ХТХ