
親ディレクトリ/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
コピーできます。file1
dir1
dir2
dir3
もう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
別のディレクトリにコピーするので、プリファレンスとユースケースの問題です。