Можно найти информацию ${...}
замены в странице справочника Вашей оболочки, например, колотите (1). Наиболее распространенное:
${var#word}
удалите самый короткий префикс: значение переменной var
с word
префикс (если таковые имеются) удаленный;
${var%word}
удалите самый короткий суффикс: значение переменной var
с word
суффикс удален (если таковые имеются).
${var/pattern/replacement}
удалите первое вхождение шаблона
${var//pattern/replacment}
удалите все случаи шаблона
Так, в Вашем примере ${f#image}
расширяется до значения f
(например, image01.png
) удаление image
префикс, таким образом, это приводит к значению 01.png
.
word
и replacement
часть в ${...}
расширения подвергаются тем же подстановочным расширениям как имена файлов; поэтому, если Вы хотите удалить пробелы и -
, Вы могли использовать ${f//[ -]/}
(замены любое возникновение символов и
-
с пустой строкой.
Все детали о странице справочника.
Если это будет быть продолжающимся процессом, то Вам будут нужны два файла, старое и новое (который стал бы старым в следующий раз).
#!/bin/sh
# change directory to either first argument or to current directory
cd ${1:-"."} || exit 1 # if cannot cd, then exit
# get the md5 values for all the files in the directory tree
find . -type f -not -name .md5sum.last -exec md5sum {} \; | sort > .md5sum.tmp
# if called before, then get only the differences in the newer
if [ -f .md5sum.last ]; then
comm -13 .md5sum.last .md5sum.tmp
else # otherwise show all the output
cat .md5sum.tmp
fi
# replace the older with the current for next time
mv .md5sum.tmp .md5sum.last
sort
и comm -13
ключ. Вид очевиден, но comm
(короткий для "общего"), покажет строки, которые находятся в первом файле (столбец 1), второй файл (столбец 2) или оба (столбец 3). -13
опция говорит для "убирания столбца один и три" отъезда только строки, которые не находятся в просто более старом и не характерны для обоих. К сожалению, если бы Вы не можете доверять меткам времени на файлах, затем это было бы очень интенсивным процессом для больших деревьев каталогов.
Я думаю, что самый легкий путь состоял бы в том, чтобы сохранить контрольную сумму файла _my_file_
в файле _my_file_.md5
постарайтесь не хранить всю контрольную сумму в единственном файле. Таким образом, намного более просто знать, была ли контрольная сумма компьютером прежде.
Однако, если Вы только добавляете, файлы к Вашему флеш-накопителю (никогда не изменяют, возможно, удаляют, но никогда не добавляют файл, который когда-то существовал, прежде), Вы могли:
find _your_drive_path_ -type f |
while read file; do
grep -q $file _your_md5_file_ || md5sum $file >> _your_md5_file_
done
Это grep
Ваш файл контрольной суммы много раз и мог быть оптимизирован путем сортировки списка файлов и сохранения файла контрольной суммы отсортированным на имени файла, но если Вам не нужна эта оптимизация, почему, беспокоясь ее сложностью...
Если Вы не можете доверять меткам времени, то нет действительно никакого способа обработать только файлы, которые изменились. Просто повторите свой оригинал find
команда.
Я сохранил бы новое MD5SUM
файл к временному местоположению, и затем diff
старые и новые файлы для наблюдения, что изменилось прежде, чем скопировать обновленный файл для высвечивания. Вы, возможно, должны были бы отсортировать файл для получения полезного различного.