BashスクリプトのForループは、コマンドに異なる値を入力します。

BashスクリプトのForループは、コマンドに異なる値を入力します。

ユーザーが3つのフォルダ名を入力したら、他の名前をすべて$ colの場所に一度だけ配置したいと思います。

rsync -RravhP $Code --exclude "pub/$col" --exclude "$col" --exclude "$col" $destination;

#!/bin/bash

echo " enter source folder name" ;
read Code ;
echo " enter destination folder name"
read destination ; 

if [ $Code ] ;
then 
    echo " enter folders to exclude seperated by a space"
    read folders ; 
    colors="$folders"
    for col in "$colors"
    do
        rsync -RravhP $Code --exclude "pub/$col" --exclude "$col" --exclude "$col" $destination ; 
    done 
else 
    echo " something went wrong, please check foldername "
fi

ベストアンサー1

--excludeユーザーが入力した名前ごとにフラグも作成したいとします。つまり、ユーザーが名前を入力したら、foo barコマンドラインに次の内容を含めたいと思いますか?

rsync ... --exclude foo --exclude bar ...

これでマークしたから、あなたが利用できるread -aユーザーが直接入力した単語を読んでください。大量に、必須パラメータを含む別の配列を構築しますrsync

read -a dirs
excludes=()
for d in "${dirs[@]}" ; do
    excludes+=(--exclude "$d")
done
rsync -RravhP "$Code" "${excludes[@]}" "$destination"

そうでない場合でも、2つの名前の合計を取得するのと同じものを入力して、スペースで名前をエスケープ-rできます。readaa bb\ ccaabb cc

おすすめ記事