在我们的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
答案 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
我希望这对你也有帮助。 对我来说工作得非常好。