特定のファイルを2つの異なる場所に移動する[閉じる]

特定のファイルを2つの異なる場所に移動する[閉じる]

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

これは例です

関連情報