Существует ли аналог "SD Memory Card Formatter" для Linux?

Ваш сценарий должен принимать более двух аргументов.

Прежде чем оболочка выполнит grepв команде

grep -l "my text" file*.ext

шаблон подстановки имен файлов file*.extрасширяется до всех совпадающих имен файлов. Таким образом, командная строка, которая будет запущена в конце, будет

grep -l "my text" file1.ext file2.ext file3.ext

(если это файлы, соответствующие шаблону)

Таким образом, ваш скрипт может выглядеть так

#!/bin/sh

pattern=$1
shift

grep -l -e "$pattern" "$@" | xargs ls -lrt

Здесь шаблон сохраняется в переменной, а затем удаляется из списка аргументов командной строки. Остальные аргументы представляют собой список имен файлов (, если шаблон подстановки имен файлов в командной строке соответствует )и доступен в "$@".

Убедитесь, что вы используете двойные кавычки $@. Это приведет к тому, что $@расширится до списка отдельно цитируемых аргументов командной строки.

Я удалил параметр -aиз ls, так как он не нужен при указании явных имен файлов в список. Я также использую grepс -eдля указания шаблона, так как шаблон с начальным дефисом(-)в противном случае может сбить с толку grep.


Если бы не сортировка, я бы предложил следующую findкоманду вместо вашего пайплайна (правильно обрабатывает имена файлов с пробелами и символами новой строки):

find. -type f -name "$filepattern" -exec grep -q -e "$pattern" {} ';' -ls

Это ищет файлы с именами, соответствующими тому, что находится в $filepattern, и с содержимым, соответствующим тому, что находится в $pattern, а затем производит ls -l-, как вывод. Поиск выполняется рекурсивно в текущем каталоге.

Как часть скрипта:

#!/bin/sh

pattern=$1
filepattern=$2

find. -type f -name "$filepattern" -exec grep -q -e "$pattern" {} ';' -ls

Этот скрипт необходимо вызывать таким образом, чтобы шаблон подстановки имени файла не расширялся оболочкой при его вызове:

$./script.sh 'my text' 'file*.ext'
0
23.07.2020, 15:27
2 ответа

Если вы используете ddправильно, это очень быстро:

Нет причин перезаписывать всю карту, это всегда займет много времени, независимо от того, какое программное обеспечение вы используете. Вам просто нужно удалить первые сектора (таблицу разделов):

dd if=/dev/zero of=/dev/locationofcard bs=1024 count=1000

Намного меньшее число также будет работать, но это уже должно быть достаточно быстро (секунд ).

Я использую 1000 как «безопасное» значение, потому что я не знаю наизусть, как низко вы можете получить.

2
18.03.2021, 23:17

SD-карты не нужно форматировать. «Форматирование» — это старый термин, характерный для магнитных дисков, когда вы подготавливаете дорожки и сектора для фактических данных (, они определяются не диском, а головкой при форматировании диска. Поэтому форматирование очень медленное.

Сейчас "форматирование" уже не такой медленный процесс, так что это и не совсем форматирование.

Часто программы просто выполняют mkfsстиль форматирование , то есть просто создают структуру файловых систем. Куда помещать данные, уже определяется картой и внутренним контроллером.

К сожалению, я не нашел команду (, которую дает контроллер )только для того, чтобы сообщить диску, что сектора не используются. Это может помочь, но, возможно, это часть mkfs(, скрытая на стороне ядра ). Но не делайте без надобности ddа на настоящих магнитных винчестерах :на SD, SSD и т.п. они просто расходуют устройство.

1
18.03.2021, 23:17

Теги

Похожие вопросы