2

在我们的 unix 服务器中,“myfolder”包含许多按日期附加的存档文件夹

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

每个存档文件夹都包含一个压缩文件,如下所示

my_transaction.log-20120410.gz

我知道下面的一个命令将复制 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

我的问题有两个部分

1)如果我想将 my_transaction.log-20120409.gz 与上述内容一起复制,那么单行命令是什么?

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

对于第二点,我认为您不能一次 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

我确实为同一问题找到了一种解决方案,请参阅:

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 回答