Вкусный поиск, установка и список

Если вы понимаете, что вам нужно, используя прочтите , вы должны достигнуть своей цели. Однако, вы не хотите, чтобы прочитанная сидела там и блокировала на неопределенное время, поэтому вы пропустите тайм-аут.

Например:

#!/bin/bash

sleep 5
echo done sleeping
read -N 10000000 -t 0.01

Вы можете набирать все, что захотите, пока работает спящий. Как только он закончит, bash вызовет чтение read, которое будет сутулиться во всем, что находится в буфере STDIN.
. Сигнал -N заставляет читать переводить клемму в символьный режим, а не в строчный. Это связано с тем, что эмулятор терминала, как правило, посылает символы только при нажатии Enter. Таким образом, если символы введены без нажатия Enter, они появятся на подсказке. Число - это сколько символов нужно прочитать. По моим подсчетам, пользователь не сможет набрать 10 миллионов символов к моменту завершения работы скрипта.
. -t делает так, что считывание будет происходить по таймауну через 0,01 секунды. Таким образом, если пользователь не может завершить 10 миллионов символов за 0,01 секунды, -t сдается и хватается за то, что было набрано до сих пор.

.
1
16.10.2014, 06:57
1 ответ

Команда find имеет для этого переключатель. Он называется -exec .

$ find . -name '*.dcm' -exec dcmdjpeg {} {} \;

Имена файлов будут заменены найти в местах {} . Так что в вышеперечисленном мы будем делать это для каждого имени файла.

dcmdjpeg file1.dcm file1.dcm
dcmdjpeg file2.dcm file2.dcm
...

Если в именах файлов имеются места, можно использовать следующий метод:

$ find . -name '*.dcm' -exec dcmdjpeg "{}" "{}" \;

Просмотр происходящего

Можно заменить команду dcmdjpeg командой echo и выполнить приведенное выше для просмотра имен файлов, которые будут выполнены.

Пример

Скажем, что у меня были эти данные образца.

$ tree
.
|-- 1
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
|-- 1.dcm
|-- 2
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
|-- 2.dcm
|-- 3
|   |-- 1.dcm
|   |-- 1\ space.dcm
|   |-- 2.dcm
|   `-- 3.dcm
`-- 3.dcm

И теперь, когда мы запускаем 2-й пример, который обрабатывает места в именах файлов:

$ find . -name '*.dcm' -exec echo "{}" "{}" \;
./2.dcm ./2.dcm
./1/2.dcm ./1/2.dcm
./1/3.dcm ./1/3.dcm
./1/1 space.dcm ./1/1 space.dcm
./1/1.dcm ./1/1.dcm
./3.dcm ./3.dcm
./1.dcm ./1.dcm
./2/2.dcm ./2/2.dcm
./2/3.dcm ./2/3.dcm
./2/1 space.dcm ./2/1 space.dcm
./2/1.dcm ./2/1.dcm
./3/2.dcm ./3/2.dcm
./3/3.dcm ./3/3.dcm
./3/1 space.dcm ./3/1 space.dcm
./3/1.dcm ./3/1.dcm

В приведенном выше можно увидеть, как имена файлов повторяются дважды на каждый найденный файл.

-121--139945-

Предположим, что в текущем каталоге имеется файлов1 . Затем:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Теперь рассмотрим, что говорится в документации:

-maxdepth 0 означает только применение тестов и действий к аргументам командной строки.

В моем первом примере выше только каталог . отображается в командной строке. С . не имеет имени file1 , в выходных данных ничего не указано. В моем втором примере выше оба . и file1 перечислены в командной строке, и, поскольку file1 соответствует -имя «file1» , он был возвращен в выходных данных

Другими словами, -maxdepth 0 означает не поиск каталогов или подкаталогов. Вместо этого следует искать только соответствующий файл среди файлов, явно перечисленных в командной строке.

В примерах в командной строке были перечислены только каталоги, ни один из которых не был назван file1 . Следовательно, никаких выходных данных.

Как правило, в командной строке можно присвоить имена многим файлам и каталогам. Например, здесь мы попробуем команду find с 11 файлами и каталогами в командной строке:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

Перекрывающиеся пути

Рассмотрим:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

Видимо, как указывает Рамеш, find будет следовать по каждому пути, указанному в командной строке, и искать совпадения, даже если пути ведут к тому же файлу, как в . файл или даже если пути являются точными дубликатами, как в file1 file1 .

-121--24751-
  1. Правильно ли я понимаю вышеуказанные команды?

Да

  1. Что означает местное репо? Каталог, содержащий все пакеты

Если вы настраиваете собственный репозиторий yum (или системный администратор в вашей лаборатории), он может называться локальным репозиторием yum. Он может находиться в локальной системе или в частной сети. Ссылка: Настройка репозитория yum .

  1. Как найти каталог репо по умолчанию yum на моем компьютере?

Этот параметр настраивается в каталоге /etc/yum.repos.d/. Здесь нет такого понятия, как по умолчанию . Если репозиторий включен, это означает, что он активен. Включенные репо можно найти по:

# yum repolist enabled  
  1. Как перечислить все пакеты, доступные только в моем местном репо?

Для этого я выполняю запрос с помощью следующей команды:

# yum --disablerepo="*" --enablerepo="myrepo" list available  

где замените myrepo на имя репозитория.

2
27.01.2020, 23:37

Теги

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