Ваш терминал окрашивается новой темой, как Вы видите нового происхождения и основных цветов. Однако сделать ls
использование больше цветов, чем набор по умолчанию цветов, необходимо создать a dir_colors
файл конфигурации и позволил ему быть полученным от ~/.bashrc
. Этот файл содержит пар цвета и типа файла, которые используются для дифференциации между различными типами файлов и их соответствующим цветом для отображения. Переменная среды LS_COLORS
должен содержать эти данные после определения источника и ls
будет использовать это для отображения имен файлов соответственно.
Последовательности цветовых кодов, используемые в dir_colors
эквивалентны bash
управляющие коды для отображения текста в цветах- 1;31
будет полужирный красный; 0;31
будет нормальный красный. Кроме того, помните, что эти цвета всегда относительно тех определенных в ~/.Xresources
так красный цвет, например, будет соответствовать XTerm*color1
и так далее.
fdupes
может сделать это. От man fdupes
:
Ищет данный путь дубликаты файлов. Такие файлы найдены путем сравнения размеров файла и подписей MD5, сопровождаемых сравнением байта байтом.
В Debian или Ubuntu, можно установить его с apt-get install fdupes
. В Fedora Hat/CentOS / Красном Hat/CentOS, можно установить его с yum install fdupes
. На Дуге Linux можно использовать pacman -S fdupes
, и на хинду, emerge fdupes
.
Для выполнения проверки, убывающей от корня файловой системы, который, вероятно, займет существенное количество времени и память, используйте что-то как fdupes -r /
.
Как спросили в комментариях, можно получить самые большие дубликаты путем выполнения следующего:
fdupes -r . | {
while IFS= read -r file; do
[[ $file ]] && du "$file"
done
} | sort -n
Это повредится, если Ваши имена файлов будут содержать новые строки.
Другой хороший инструмент fslint
:
fslint является набором инструментов для нахождения различных проблем с файловыми системами, включая дубликаты файлов и проблематичные имена файлов и т.д.
Отдельные инструменты командной строки доступны в дополнение к GUI и получить доступ к ним, можно измениться на или добавить к $PATH/usr/share/fslint/fslint каталог на стандартной установке. Каждая из этих команд в том каталоге имеет - опция справки который более подробная информация ее параметры.
findup - find DUPlicate files
В находящихся в debian системах youcan устанавливают его с:
sudo apt-get install fslint
Можно также сделать это вручную, если Вы не хотите или не можете установить сторонние инструменты. Путем большая часть такой работы программ путем вычисления контрольных сумм файла. Файлы с тем же md5sum почти наверняка содержат точно те же данные. Так, Вы могли сделать что-то вроде этого:
find / -type f -exec md5sum {} \; > md5sums
awk '{print $1}' md5sums | sort | uniq -d > dupes
while read -r d; do echo "---"; grep -- "$d" md5sums | cut -d ' ' -f 2-; done < dupes
Демонстрационный вывод (имена файлов в этом примере являются тем же, но это будет также работать, когда они будут отличаться):
$ while read -r d; do echo "---"; grep -- "$d" md5sums | cut -d ' ' -f 2-; done < dupes
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/if_bonding.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/if_bonding.h
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/route.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/route.h
---
/usr/src/linux-headers-3.2.0-3-common/include/drm/Kbuild
/usr/src/linux-headers-3.2.0-4-common/include/drm/Kbuild
---
Это будет намного медленнее, чем специальные инструменты, уже упомянутые, но это будет работать.
st_size
, устранение любого, которые только имеют один файл этого размера и затем вычисление md5sums только между файлами с тем же st_size
.
– Chris Down
04.04.2013, 19:34
Короткий ответ: да.
Более длительная версия: взгляните на Википедию fdupes запись, она щеголяет довольно хорошим списком готовых решений. Конечно, можно записать собственное, дело не в этом трудный - хеширование программ как diff
, sha*sum
, find
, sort
и uniq
должен сделать задание. Можно даже поместить его на одну строку, и это все еще будет понятно.
Если Вы полагаете, что хеш-функция (здесь MD5) без коллизий на Вашем домене:
find $target -type f -exec md5sum '{}' + | sort | uniq --all-repeated --check-chars=32 \
| cut --characters=35-
Хотите идентичные сгруппированные имена файлов? Запишите простой сценарий not_uniq.sh
к выводу формата:
#!/bin/bash
last_checksum=0
while read line; do
checksum=${line:0:32}
filename=${line:34}
if [ $checksum == $last_checksum ]; then
if [ ${last_filename:-0} != '0' ]; then
echo $last_filename
unset last_filename
fi
echo $filename
else
if [ ${last_filename:-0} == '0' ]; then
echo "======="
fi
last_filename=$filename
fi
last_checksum=$checksum
done
Затем изменение find
управляйте для использования сценария:
chmod +x not_uniq.sh
find $target -type f -exec md5sum '{}' + | sort | not_uniq.sh
Это - основная идея. Вероятно, необходимо измениться find
если Ваши имена файлов, содержащие некоторые символы. (например, пространство)
Википедия имела статью (http://en.wikipedia.org/wiki/List_of_duplicate_file_finders) со списком доступного программного обеспечения с открытым исходным кодом для этой задачи, но это было теперь удалено.
Я добавлю, что версия GUI fslint очень интересна, позволяя использовать маску для выбора который файлы удалить. Очень полезный для очистки дублированных фотографий.
На Linux можно использовать:
- FSLint: http://www.pixelbeat.org/fslint/
- FDupes: https://en.wikipedia.org/wiki/Fdupes
- DupeGuru: https://www.hardcoded.net/dupeguru/
2 последних работы над многими системами (окна, Mac и Linux) я 've не проверенный на FSLint
Вот мое мнение по этому поводу:
find -type f -size +3M -print0 | while IFS= read -r -d '' i; do
echo -n '.'
if grep -q "$i" md5-partial.txt; then echo -e "\n$i ---- Already counted, skipping."; continue; fi
MD5=`dd bs=1M count=1 if="$i" status=noxfer | md5sum`
MD5=`echo $MD5 | cut -d' ' -f1`
if grep "$MD5" md5-partial.txt; then echo "\n$i ---- Possible duplicate"; fi
echo $MD5 $i >> md5-partial.txt
done
Отличие состоит в том, что хешируется только первый 1 МБ файла.
У этого есть несколько проблем/особенностей:
Я использую его для сравнения видеоклипов, так что мне этого достаточно.
Я понимаю, что это некро, но это очень актуально. Я задавал аналогичный вопрос в Поиск дубликатов файлов на основе первых нескольких символов имени файла , и то, что было представлено, было решением для использования некоторого сценария awk.
Я использую его для очистки конфликтов модов, что полезно в пакетах Forge 1.14.4+, потому что Forge теперь отключает более старые моды вместо фатального сбоя и сообщения о дубликатах.
#!/bin/bash
declare -a names
xIFS="${IFS}"
IFS="^M"
while true; do
awk -F'[-_ ]' '
NR==FNR {seen[tolower($1)]++; next}
seen[tolower($1)] > 1
' <(printf "%s\n" *.jar) <(printf "%s\n" *.jar) > tmp.dat
IDX=0
names=()
readarray names < tmp.dat
size=${#names[@]}
clear
printf '\nPossible Dupes\n'
for (( i=0; i<${size}; i++)); do
printf '%s\t%s' ${i} ${names[i]}
done
printf '\nWhich dupe would you like to delete?\nEnter # to delete or q to quit\n'
read n
if [ $n == 'q' ]; then
exit
fi
if [ $n -lt 0 ] || [ $n -gt $size ]; then
read -p "Invalid Option: present [ENTER] to try again" dummyvar
continue
fi
#clean the carriage return \n from the name
IFS='^M'
read -ra TARGET <<< "${names[$n]}"
unset IFS
#now remove the first element from the filesystem
rm "${TARGET[0]}"
echo "removed ${TARGET[0]}" >> rm.log
done
IFS="${xIFS}"
Я рекомендую сохранить его как «dupes.sh» в вашу личную корзину или /usr/var/bin
У меня была ситуация, когда я работал в среде, где я не мог установить новое программное обеспечение, и мне приходилось сканировать >380 ГБ файлов JPG и MOV на наличие дубликатов. Я разработал следующий POSIX-скрипт awk для обработки всех данных за 72 секунды (, в отличие от подхода find -exec md5sum
, выполнение которого занимало более 90 минут):
https://github.com/taltman/scripts/blob/master/unix_utils/find-dupes.awk
Вы называете это следующим образом:
ls -lTR | awk -f find-dupes.awk
Он был разработан в среде оболочки FreeBSD, поэтому для оптимальной работы в среде оболочки GNU/Linux могут потребоваться некоторые настройки.
В Linux для поиска дубликатов файлов можно использовать следующие инструменты.
https://github.com/adrianlopezroche/fdupes
https://github.com/arsenetar/dupeguru
https://github.com/jbruchon/jdupes
https://github.com/pauldreik/rdfind
https://github.com/pixelb/fslint
https://github.com/sahib/rmlint
fdupes ....... | xargs ls -alhd | egrep 'M |G '
сохранять файлы в Человекочитаемом формате и только тех, которые имеют размер в Мегабайтах или Гигабайтах. Измените команду для удовлетворения реальным выводам. – Olivier Dulac 05.04.2013, 15:27du
переданный по каналу кsort
скажет Вам. – Chris Down 05.04.2013, 16:14