Использовать locate
Причина - это locate
использует базу данных всех существующих каталогов и файлов, это было уже создано точно так же, как Вы вообразили!
http://linux.about.com/od/commands/l/blcmdl5_locatedb.htm
В некотором наборе (и изменяемый) интервал, который делают прогоны задания, сканирует файловую систему и затем создает базу данных с ним. Затем эта база данных (locatedb), с ее соответствующими индексами locate
команда идет вразрез вместо того, чтобы сканировать через Ваш жесткий диск в той точке.
Таким образом, позитивный аспект - то, что это очень быстро по сравнению со сканированием жесткого диска. Оборотная сторона - то, что определять местоположение база данных (locatedb) не 'жива', так может только использоваться для файлов, которые существовали 'с' последнего сканирования.
Обновить locatedb, теперь выполненный updatedb
(или sudo updatedb
при необходимости)
btw я просто работал sudo updatedb
локально и потребовалось 3 1/2 секунды! У меня есть 31 000 файлов.
Просто используйте параметры командной строки вместо stdin и используйте chpasswd для пароля.
Например:
sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd
adduser
называет внешнюю программу chfn
считать полное имя и другую информацию о пользователе. chfn
читает bufferful входа, включая не только, в чем он нуждается, но и это длится Y
строка. Когда adduser
просит подтверждение позже, Y
строка была считана (но проигнорирована) chfn
, так adduser
видит конец файла на его входе. Переменная $answer
как ожидают, будет содержать строку входа, но потому что не было никакого входа для чтения, это не определено.
Так как Вы пишете сценарий, передаете данные (кроме пароля) на командной строке.