2016-04-28 13 views
1

私は本当に新しくbashを使用しています。ディレクトリ内のすべての画像をループして個別に別のディレクトリにコピーするスクリプトを作成しようとしています。私は構文に精通していないので、私が間違っていることを実際に理解することはできません。コマンドライン引数を使って別のディレクトリに画像をコピーするbash

func() 
{ 
FILES=$1 
FILES+=/*.jpg 
for f in $FILES 
do 
    echo "$f" 
    cp "$f" $2 

done; 
} 
func $1 $2 

私は script ./images ./test のような引数を入力した場合には、

/images/image1.jpg 
/images/image2.jpg 

としてすべての画像をエコー表示など、実際にはテストディレクトリにコピーではないです。どのような問題が起こる可能性がありますか?

+0

なぜ 'cp * .jpg/path/to/destination_dir /'ではないのですか? (あなたのファイル名にスペースがない限り)。 'cp'はそのように動作するように設計されています。あなたは 'man cp'と打ち込んでcmd-lineからオンライン文書を読むことができるかもしれません。がんばろう。 – shellter

+0

実際には、私はあなたのコードを試して、期待どおりに働いた。 2 jpgファイルをテストフォルダにコピーしました。 'test'フォルダが存在する場所でコードを実行していない可能性がありますか? – Esref

+0

私に確認していただきありがとうございます。私はそれをサーバー上で実行していて、ディレクトリーは適切に再表示されませんでしたが、実際は機能していました。ありがとう! – Taylor

答えて

2

私は

あなたはこの

find path_to_your_directory -type f -name *.jpg -exec cp {} where_to_copy \; 
よう findコマンドを使用することができ ディレクトリ内のすべての画像をループにスクリプトを記述し、別のディレクトリに個別にそれらをコピーしようとしています

@shelterはcp *.jpg /path/to/destination_dir/を使用することができますが、この場合は空白を含むファイルの大文字と小文字を区別するコードを書く必要があります。file with spaces.jpg

しかし、findが自動的に処理します。

+0

ありがとうございます。 Findははるかにうまく動作し、ループを置き換えるようにしようとしています。 – Taylor

関連する問題