Как я могу перечислить информацию для массива/dev/disks, использующего расширение удара или замену?

Для простоты обслуживания (если бы Ваш список строк для поиска может измениться в будущем), я поместил бы шаблоны в файл (например, patterns.txt) и использовал бы -f переключатель (-R является ненужным, если Вы ограничиваете find в файлы; -H даст Вам имя файла в случае, если существует только один; -F причины grep для обработки шаблонов, которые Вы ищете как строки и не регулярные выражения, который обычно является, что Вы хотите):

find /var/www/http -type f -exec grep -iHFf patterns.txt {} +
4
01.07.2014, 05:30
2 ответа

Расширение скобки, о котором вы спрашиваете, будет расширяться только для файлов/каталогов, которые совпадают на диске с используемым шаблоном. Другая проблема, с которой вы столкнетесь, это то, что diskutil не может обрабатывать более 1 аргумента за раз. Для их расширения необходимо выполнить в то время как или для цикла и передать результаты в diskutil во время выполнения итераций по циклу.

Пример

$ for i in /dev/*; do diskutil "$i";done

Что касается вашего второго вопроса, то на самом деле нет никакого метода, который бы помог вам в ситуациях, когда на диске нет соответствующих файлов/каталогов.

Разбор diskutil

Учитывая вывод этой команды, Вам придется прибегнуть к использованию таких инструментов, как awk, sed, или grep для "разбора" этого вывода, чтобы Вы могли получить значимую информацию о дисках, для последующих запросов, вызывая diskutil во 2-ой раз.

Пример

Вот пример грубого парсинга выхода из diskutil с помощью grep и sed. Есть более эффективные способы сделать это, но это показывает вам общий подход.

$ diskutil list | grep -E "[ ]+[0-9]+:.*disk[0-9]+" | sed 's/.*\(disk.*\)/\1/'
disk0
disk0s1
disk0s2
disk0s3

С помощью этого подхода вы можете затем изменить цикл для выше так:

$ for i in $(diskutil list | grep -E "[ ]+[0-9]+:.*disk[0-9]+" | \
    sed 's/.*\(disk.*\)/\1/'); do diskutil info $i; done
2
27.01.2020, 20:58

Если вывод diskutil list что-то вроде disk0 disk0s1 disk1s1 (разделенный пробелом или новой строкой), то Вам нужно что-то вроде этого:

for dev in $(diskutil list); do
  diskutil info "$dev"
done

find

find ~/ -type f \( -name '*mp3' -or -name '*mp4' \)

Вы должны процитировать метасимволы, которые find должен видеть.

.
1
27.01.2020, 20:58

Теги

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