2016-11-16 4 views
2

私はフィルタリングしているフォルダのコレクションを持っており、それらに付随するユーザーアカウントを作成する必要があります。私のgrepの出力をuseraddにユーザー名としてパイプすることはできますか?useraddのリストをuseraddにパイプすることはできますか?

コンテキスト:FTPの移行。 WindowsからLinux FTPサーバーに移動しましたが、ストレージはその場所に残っています。フォルダは古いFTPユーザフォルダで、フォルダ名はFTPログイン名と一致します。探しています:

ls /media/OldFTP | grep -Ev '^[[:digit:]]{4}|^P[[:digit:]]{4}|^W[[:digit:]]{4}' | useradd -M -g ftpusers -N -p [encrytedPassword] 

私のgrep検索の出力をuseraddのusernameフィールドに渡そうとしています。

答えて

3

encryptedPasswordは、すべてのユーザーに対して同じになる場合は、標準入力に渡される引数ごとにコマンドを1回実行するためにxargs -n1 <cmd>を使用することができます。

ls /media/OldFTP | 
    grep -Ev '^[[:digit:]]{4}|^P[[:digit:]]{4}|^W[[:digit:]]{4}' | 
    xargs -n1 -d'\n' useradd -M -g ftpusers -N -p [encryptedPassword] 
+0

Ah xargs!私はいつもxargsを忘れる。 –

+0

私はそれが好きです!私はループする必要がないことを望んでいた。そして、残念ながら、はい、それらのすべてが同じパスワードを持っています:(ありがとう! – Crimius

2

ループはforループを使用する必要があります。ような何か:

for user in `ls /media/OldFTP | grep -Ev '^[[:digit:]]{4}|^P[[:digit:]]{4}|^W[[:digit:]]{4}'` 
do 
    # initialize user's password somehow. 
    encrytedPassword=`openssl rand -base64 10 | tr -cd '[:alnum:]' | cut -c1-10` 
    useradd -M -g ftpusers -N -p $encrytedPassword $user 
done