2

私たちのUNIXサーバーでは、「myfolder」には日付が追加された多くのアーカイブフォルダが含まれています

archive.2012-04-10
archive.2012-04-11

各アーカイブフォルダには、以下のようなzipファイルが含まれています

my_transaction.log-20120410.gz

以下の1つのコマンドは、my_transaction.log-20120410.gz、my_transaction.log-20120411.gz、およびmy_transaction.log-20120412.gzをコピーし、「serverip」サーバーの下の/tmpフォルダーに配置することを知っています。

scp /myfolder/archive.2012-04-1[0-2]/my_transaction* username@serverip:/tmp

私の質問は2つの部分に分かれています

1)my_transaction.log-20120409.gzも上記と一緒にコピーしたい場合、1行のコマンドは何でしょうか?

2)/tmpフォルダーの下にあるコピーされたファイルをコピーして名前を変更するコマンドは何でしょうか。つまり、/tmpの下に次のようにコピーする必要があります。'serverip' / tmpフォルダーにコピーしながら、トランザクションを含む_1を追加したいと思います。

my_transaction_1.log-20120409.gz
my_transaction_1.log-20120410.gz
my_transaction_1.log-20120411.gz
my_transaction_1.log-20120412.gz
4

2 に答える 2

3

最初のポイントとして、拡張グロブを試してください:(未テスト)

# This could go in your ~/.bashrc
shopt -s extglob
scp /myfolder/archive.2012-04-@(09|1[0-2])/my_transaction* username@serverip:/tmp

2つ目のポイントとして、一度にすべてのファイルのscpと名前の変更を行うことはできないと思います。ただし、それらすべてをループで実行できます。例(これもテストされていません)

for file in /myfolder/archive.2012-04-@(09|1[0-2])/my_transaction*; do
    newfile=$( echo $file | sed -e "s/my_transaction/my_transaction_1/")
    # Take out the "echo" if the command looks OK
    echo scp $newfile username@serverip:/tmp
done
于 2012-04-19T10:28:06.117 に答える
0

同じ問題の解決策を1つ見つけました。以下を参照してください。

scp -v localhost:/home/myuser/test/arquivo* .  2>&1| grep -i modes|awk '{print $6}'

これにより、scpによって転送されたファイル名が取得されます。これは、各名前があり、各ファイルの後にawkを使用して名前を変更できるためです。

scp -v localhost:/home/myuser/test/arquivo* .  2>&1| grep -i modes|awk '{print "mv "$6" "$6".renamed"}'|sh -x

これがあなたにも役立つことを願っています。私にとってはとてもうまくいっています。

于 2015-02-17T13:23:21.210 に答える