2017-05-04 23 views
0

複数のソースフォルダがあります(これらのフォルダにはIPアドレスEx: 192.168.2.1という名前のファイルがたくさんあります)、それらをターゲットフォルダにマージします。2つのフォルダをマージしてファイルの名前を同じに保ちます

Linux端末でこの操作を行う方法は何ですか?

ソース1

/Desktop/source1/192.168.2.1 
/Desktop/source1/192.168.2.2 
/Desktop/source1/192.168.2.3 

ソース2

/Desktop/source2/192.168.2.1 
/Desktop/source2/192.168.2.2 
/Desktop/source2/192.168.2.3 

源3

/Desktop/source2/192.168.2.1 

源4

源5

源6

ターゲット

/Desktop/target/192.168.2.1 
/Desktop/target/192.168.2.2 
/Desktop/target/192.168.2.3 
/Desktop/target/192.168.2.1.copy 
/Desktop/target/192.168.2.2.copy 
/Desktop/target/192.168.2.3.copy 
/Desktop/target/192.168.2.1.copy.copy 

元のファイルは、彼らが何であるかのように、私はちょうどそれらをという名前のファイル拡張子を持っていませんが、私はgeditのか、任意のテキストエディタでそれらを開封しております。複製されたファイルの接尾辞は( '192.168.2.3.copyまたは192.168.2.3_2であるか、または別のものでなければならない)

Linuxでcpコマンド、シェルスクリプトまたは他のコマンドでこの操作を実行する方法?

+0

私は、まっすぐ前方を言う:あなたは、既存のファイルのリストを取って、それを反復し、そのファイルの名前が存在するなら条件ごとに決定する。そうでない場合は、単純なコピー、それ以外の場合はコピーと名前の変更を行います。 – arkascha

答えて

1
cp source1/* target/ 
cp -f --backup --suffix='.copy' source2/* target/ 

ただ、これはsource2ではなく、source1内にあるすべてのファイルに.copyサフィックスを追加しないことに注意してください。つまり、.copyは重複するファイル名に対してのみ追加されます。

cp source1/* target/ 
for i in {2..n} ; do 
    cp -f --backup=numbered source${i}/* target/ 
done 

があなたのフォルダ番号とnを置き換えます

複数のソースフォルダの場合、あなたのような何かを行うことができます。これにより、最初のコピーには.~1~、2番目のコピーには.~2~などとなります。

+0

には2つの質問があります。この方法は機能しています。しかし、私はその質問に言及していませんが、今更新する予定です。別の場所からファイルをコピーしようとしたときに複数のソースがある場合は、そのファイルをターゲットフォルダに保存する必要があります。だから、私はその場合何をすべきですか?私はcpのmanページを見て、 - suffixを見ませんでした。どこで " - 接尾辞"を見た? – enterbutton

+0

編集した複数のフォルダの回答を参照してください。'--suffix'もmanページの' -S'です。私はそれが何をするかについてより明確であるので、長いオプションを好む。 – Munir

+0

ありがとう、@ムニールは働いている!私は少し演奏しました。これは 'cp -v --suffix = '_' $ i source $ {i}/* target /' – enterbutton

関連する問題