复制时重命名文件

时间:2012-04-19 10:18:01

标签: sftp scp file-rename

在我们的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

2 个答案:

答案 0 :(得分:2)

首先,请尝试extended globbing :(未经测试)

# 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

答案 1 :(得分: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

我希望这对你也有帮助。 对我来说工作得非常好。