Или, альтернативно, снимки Debian, которые Elazar опубликовал в своем ответе, вы можете использовать репозитории пакетов Ubuntu для более старых версий Ubuntu: http://packages.ubuntu.com
Добавьте их в /etc/apt/sources.list, как уже писал Элазар:
deb http://archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://archive.ubuntu.com/ubuntu/ hardy universe
Репозиторий Hardy Universe - это тот, который содержит gcc-3.4.
заставляет сценарий взять имя этого конкретного файла, который вы хотите исключить как аргумент.
#!/bin/bash
rm -f md5checksums
find -type f ! -iname "$1" -exec md5sum "{}" + > md5checksums
вызывать скрипт с помощью ./script "md5checksums"
Самый простой способ избежать конфликтов, связанных с перенаправлением на файл, влияющий на команду, заключается в использовании sponge from moreutils:
sponge reads standard input and writes it out to the specified file.
Unlike a shell redirect, sponge soaks up all its input before opening
the output file. This allows constructing pipelines that read from and
write to the same file.
Эффект заключается в том, что файл, если он еще не указан, isn созданный до тех пор, пока трубопровод не завершится. Итак:
find . -type f -exec md5sum {} + | sponge md5checksums
Использование только bash:
Использование GLOBIGNORE:
$ GLOBIGNORE='md5checksums' ## Pattern to ignore
$ shopt -s globstar ## Recursive globbing
$ { for i in **/*; do [ -f "$i" ] && md5sum "$i"; done ;} >md5checksums
Использование extglob:
$ shopt -s extglob ## Enables extended pattern matching, enabled by default
$ shopt -s globstar
$ { for i in **/!(md5checksums); do [ -f "$i" ] && md5sum "$i"; done ;} >md5checksums
Использование zsh:
% setopt extended_glob
% { for i in **/^md5checksums(.); do md5sum "$i"; done ;} >md5checksums
zsh выполняет повторное сопоставление по умолчанию при использовании ** ^md5checksums является zsh расширенным шаблоном glob, что означает для соответствия всем остальным, кроме md5checksums. Квалификатор glob (.) ограничивает соответствие только обычным файлам. Другой, который делает то, что вы хотите:
#!/bin/bash
rm -f md5checksums
find -type f -not -name "md5checksums" -exec md5sum "{}" + > md5checksums
Спасибо @heemayl за приятное вдохновение в его ответе.
#!/bin/bash
shopt -s globstar
rm -f md5checksums
for i in **/*; do
if [ ! -f "$i" -o "$i" = md5checksums -o "$i" = this_script.sh ]; then
continue
else
md5sum "$i" >> md5checksums
fi
done