2017-05-30 12 views
0

すべてのファイルを1つのディレクトリ(SRC)から別のディレクトリ(DES)にコピーする小さなスクリプトがあります。このスクリプトは完全に実行されています。bash shell breakとcontinueを使用してある場所から別の場所にファイルをコピーします。

#!/bin/bash 

SRC="/home/user/dir1/*" 
DES="/home/user/dir2/" 

for file in "$SRC" 
do 
     if [ -f "$file" ] 
     then 
       cp "$file" "$DES" 
       echo "$file -----> file copied" 
     fi 
done 

今あるディレクトリから別のディレクトリにファイルをコピーしながら、私はそのファイルが既に(SRC)ディレクトリの同じ名前を持つ(DES)ディレクトリに存在している場合、コピーファイルをスキップして続行するか、考えていますどのようないつものようにソースからデスティネーションまで残っているファイルですか?

ここでは、この動作を実行するためにブレークしてループを続ける方法はありますか?

ありがとう、

+0

-eファイル名を確認してください –

+2

これは1つのファイル '/ home/user/dir1/*'のみをコピーします。すべてのパラメータを引用しているため、グロブ展開は実行されません。 – chepner

+2

'for $ SRC'には、値が単語分割の対象となるため、独自の問題があります。 'SRC =/home/user/dir1'を設定し、' $ SRC "/ *'の 'forファイルを繰り返し処理するか、配列を使って展開した名前のリストを格納します:' SRC =(/ home/user/dir1/*); "$ {SRC [@]}"のファイルの場合。後で展開する変数にグロブを格納するのは良い方法ではありません。 – chepner

答えて

2

なぜ、スクリプト全体をワンライナーに縮小しないのですか?

cp -n /home/user/dir1/* /home/user/dir2/ 

-nフラグ(​​)は、既存のファイルを上書きcpを防ぐことができます。

実際の状況がより複雑な場合は、rsyncもご覧ください。

3

私はrsyncを使用することをお勧めします。

src="/home/user/dir1/" 
dst="/home/user/dir2/" 
rsync -rav --ignore-existing "${src}" "${dst}" 

スイッチ--ignore-existingが目的地に存在するファイルをスキップするrsyncに指示します。

関連する問題