求一个复制文件的shell脚本

时间:2022-10-03 21:53:42
如题:需要这样一个脚本,能够将一个目录下(包括其所有子目录)的*.c,*.h文件复制到另外一个目录下,生成对应目录下的*_c.log和*_h.log文件。以及一个还原回去的脚本,谢谢啦!

8 个解决方案

#1


进入原目录执行
for i in `ls *`; do cp $i /目的目录/${i%.*}_${i##*.}.log; done 

#2


cp 最好带上 -a

#3


佩服rucypli!!!

#4


备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done

#5


引用 4 楼 ljc007 的回复:
备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done

nice,我说原来windows版的版主哪里去了!
这类脚本还是加入些日志功能吧,误操作之后起码有记录。

#6


引用 4 楼 ljc007 的回复:
备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done


我可能没有表达清楚,源文件夹中可能包含.c .h文件,也可能包含文件夹,如果包含文件夹的话,要能按上述规则递归这个文件夹。请在帮忙修改一下啦,谢谢!我用C语言写了一个这种程序,超级麻烦,而且还有一些bug。希望shell脚本能够简单点。

#7


引用 5 楼 orangepigmm 的回复:
Quote: 引用 4 楼 ljc007 的回复:

备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done

nice,我说原来windows版的版主哪里去了!
这类脚本还是加入些日志功能吧,误操作之后起码有记录。


能在帮忙修改一下吗?谢谢啦!

#8


引用 1 楼 rucypli 的回复:
进入原目录执行
for i in `ls *`; do cp $i /目的目录/${i%.*}_${i##*.}.log; done 
很厉害

#1


进入原目录执行
for i in `ls *`; do cp $i /目的目录/${i%.*}_${i##*.}.log; done 

#2


cp 最好带上 -a

#3


佩服rucypli!!!

#4


备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done

#5


引用 4 楼 ljc007 的回复:
备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done

nice,我说原来windows版的版主哪里去了!
这类脚本还是加入些日志功能吧,误操作之后起码有记录。

#6


引用 4 楼 ljc007 的回复:
备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done


我可能没有表达清楚,源文件夹中可能包含.c .h文件,也可能包含文件夹,如果包含文件夹的话,要能按上述规则递归这个文件夹。请在帮忙修改一下啦,谢谢!我用C语言写了一个这种程序,超级麻烦,而且还有一些bug。希望shell脚本能够简单点。

#7


引用 5 楼 orangepigmm 的回复:
Quote: 引用 4 楼 ljc007 的回复:

备份
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $SRC_FOLDER/*.c $SRC_FOLDER/*.h; do
    fileName=`basename $i`
    cp -p $i $DST_FOLDER/${fileName%.*}_${fileName##*.}.log
done


还原
#!/bin/bash
SRC_FOLDER=/var/tmp/folder1
DST_FOLDER=/var/tmp/folder2
for i in $DST_FOLDER/*.log; do
    fileName=`basename $i`
    fileExt=${fileName%.log}
    filePre=${fileName%_?.log}
    cp -p $i $SRC_FOLDER/${filePre}.${fileExt##*_}
done

nice,我说原来windows版的版主哪里去了!
这类脚本还是加入些日志功能吧,误操作之后起码有记录。


能在帮忙修改一下吗?谢谢啦!

#8


引用 1 楼 rucypli 的回复:
进入原目录执行
for i in `ls *`; do cp $i /目的目录/${i%.*}_${i##*.}.log; done 
很厉害