私はbashスクリプティングには新しく、私は宿題スクリプトでアイデアを使い果たしました。bashスクリプト - スクリプトパラメータ内の空白を無視する
スクリプトはpathToDirectory、[-c/-m/-r] ==コピー/移動/削除ext1とext2の4つの引数をとります(スクリプトの実行例:script.sh/home/user/somefolder- c a.txt b.sh)。
スクリプトは、名前に 'a.txt'を含む/ home/user/someFolder(およびそのすべてのサブフォルダ)内のすべてのファイルを検索する必要があります(-cおよび-mの場合) partに 'b.sh'を指定し、-c/-m引数に応じて新しいファイルを作成するか、既存のファイルの名前を変更する(-rの場合はファイルを削除するだけです)、 'old name =>新しい名前'。上記のスクリプトの
出力例:
/home/user/someFolder/bbb.txt => /home/user/someFolder/bba.txt
まあ、それは実装する問題ではありませんでした、私のコードを私たちのアップロードシステムに投稿する(私たちのスクリプトを評価する)まで、すべてはうまくいった。
私のスクリプトを実行する最初のアップロードシステムの試みは、 "script.sh/something/graph 1 -c .jpg .jpeg"のように見えます。
'/ something/graph 1'全体がパスであり、 '1'の前の空白がすべてそれを破壊するという問題があります。
予想される出力:./projekty/graph 1.jpg => ./projekty/graph 1.jpeg
私のスクリプトの出力:./projekty/graph => ./projekty/graph.jpeg 1.jpg => 1.jpeg
私はこれまで持って
:
if [ "$2" = "-r" ]; then
for file in $(find $1 -name "*$3"); do
echo $file
rm -f $file
done
elif [ "$2" = "-c" ]; then
for file in $(find "$1" -name "*$3") ; do
cp "$file" "${file//$3/$4}"
echo $file "=>" ${file%$3}$4
done
elif [ "$2" = "-m" ]; then
for file in $(find $1 -name "*$3"); do
mv "$file" "${file//$3/$4}"
echo $file "=>" ${file%$3}$4
done
else
echo Unknown parameter >&2
fi
私が試した& notworking & probablystupidアイデア:として-r/-c/-mパラメータは$ 2でなければなりません。$ 2が何か他のもの(パスに属するものと仮定して)を検出し、その$ 2を$ 1に追加することができました。シフトを使用して、すべてのパラメータを左に移動しました(空白のため、-r/-m/-cパラメータは$ 2ではなく$ 3だったので、$ 2にしました)。 -c一部)私は「$ DIR」をエコーするとき
DIR=$1
if [ "$2" != "-r" ] && [ "$2" != "-c" ] && [ "$2" != "-m" ]; then
DIR+=" $2"
shift
fi
if [ "$2" = "-c" ]; then
for file in $(find "$DIR" -name "*$3") ; do
cp "$file" "${file//$3/$4}"
echo $file "=>" ${file%$3}$4
done
fi
が、それは全体のパス(正しく)を示したが、それはまだ動作しませんでした... は、修正するためにどのように他の/より良い/どのような方法がありますこれはどうですか? :/
ありがとうございます!