あるディレクトリ内のすべてのファイルを同じ親ディレクトリの下のすべてのディレクトリにコピーします。

あるディレクトリ内のすべてのファイルを同じ親ディレクトリの下のすべてのディレクトリにコピーします。

親ディレクトリ/home/testがあり、そのディレクトリ内に複数のディレクトリがあります。名前はserver {1..10}です。ここで、server3にはリモートサーバーからコピーされた複数のファイルがあります。 cpを試してみましたが、うまくいきません。 server3ディレクトリ内のすべてのファイルまたは1つのファイルを/ home / testの下の残りのサーバーディレクトリにコピーする方法はありますか?

答え1

あなたが望むものが何であるかを理解するならば、最も簡単な方法はforループです。

myList="server1 server2 server4 server5 server6 server7 server8 server9 server10"
for myDir in $myList ; do cp server3/* $myDir/ ; done

答え2

最も簡単な方法は、ループでこれを行うことです。

for i in ./server*; do cp ./server3/testfile* "${i}"; done

server3ディレクトリの内容を現在のパスのすべてのディレクトリにコピーします。また、ファイルを同じディレクトリにコピーしようとしますが、同じファイルであるものだけを印刷して続行します。

編集する: 不快なエラーメッセージを回避するには、より具体的なワイルドカード文字を使用してforループを強化できます。たとえば、スキップするには、server3次のようにします。server[1-24-9]

答え3

cp複数のソースを処理できますが、複数のターゲットは処理できません。

たとえば、これを使用して、およびにecho dir1 dir2 dir3 | xargs -n 1 cp file1コピーできます。file1dir1dir2dir3

もう1つの修正は、echo dir1 dir2 dir3 | xargs -n 1 cp /home/test/server3/*指定されたディレクトリ内のすべてのファイルをechoディレクトリにコピーすることです。

少し短い追加のソリューション(ディレクトリ名を入力する必要はありません)は次のとおりです。

ls -1 | grep -v server3 | xargs -n 1 cp server3/*

最後に、コピー

最初のソリューションの例を追加します。

# creating sample dir structure
[shadowe@shadow Desktop]$ mkdir server1
[shadowe@shadow Desktop]$ mkdir server2
[shadowe@shadow Desktop]$ mkdir server3
[shadowe@shadow Desktop]$ touch server3/test.one
[shadowe@shadow Desktop]$ touch server3/test.two
[shadowe@shadow Desktop]$ ls -R
./server1:
./server2:
./server3:
test.one  test.two

# executing solution
$ echo /home/shadowe/Desktop/server2/ /home/shadowe/Desktop/server1/ | xargs -n 1 cp /home/shadowe/Desktop/server3/*

# verifying solution
[shadowe@shadow Desktop]$ ls -R
./server1:
test.one  test.two
./server2:
test.one  test.two
./server3:
test.one  test.two

2番目のソリューションの例を追加:

# showing directories structure and initial state
$ ls -R
server1:
server2:
server3:
test.one  test.two
server4:
server5:
server6:

# executing command
$ ls -1 | grep -v server3 | xargs -n 1 cp server3/*

# checking results
$ ls -R
./server1:
test.one  test.two
./server2:
test.one  test.two
./server3:
test.one  test.two
./server4:
test.one  test.two
./server5:
test.one  test.two
./server6:
test.one  test.two

示されているように、両方のコマンドはすべてのファイルをserver3別のディレクトリにコピーするので、プリファレンスとユースケースの問題です。

関連情報