Unixファイルの分離について質問があります。 Unixディレクトリの名前は異なりますが、拡張子は同じファイルが複数あると仮定します。例えば
/dir/AB_123yuu.pdf
/dir/SD_234ggj.pdf
/dir/AB_123jlhj.pdf
/dir/DE_373hhj.pdf
etc...
要件は、名前で始まるすべてのファイルをコピー AB_123
し、server1
残りのファイルもコピーすることです。server2
答え1
bash
拡張globメカニズムを使用する場合:
shopt -s extglob
cp ABC_123* /server1/
cp !(ABC_123*) /server2/
これは!(pattern)
すべて似合うとは別に与えられたパターン。
zsh
このようになります
setopt extendedglob
cp AB_123* /server1/
cp *~AB_123* /server2/
はるかに簡単です
cp ^AB_123* /server2/
答え2
このextglob
オプションを使用してrsync
shopt -s extglob
rsync -a AB_123* server1:/home/foo/files &
rsync -a !(AB_123*) server2:/home/foo/files &
詳しくは、この質問をご覧ください。
答え3
2つの配列の作成
AR1: AB_123*.pdf 正規表現一致ファイルの場合
AR2:AB_123プレフィックスなしで拡張子が* .pdfのファイルに適用可能
2 つの find コマンドで入力し、scp を使用してファイルをリモートサーバーにコピーします。
AR1=()
AR2=()
for file in $(find /path -name AB_123*.pdf); do AR1+=($file); done
for file in $(find . -name *.pdf | grep -v /AB_123); do AR2+=($file); done
scp ${AR1[*]} username@server1:/remote/path
scp ${AR2[*]} username@server2:/remote/path
これは例です