cp复制文件到多个目录下及强制覆盖
工作中有遇到要把一个文件拷贝到N个文件夹下,但是cp又没有这样的命令,怎么办,这时需要编写一个脚本,首先做实验如下:
[root@host1 ~]# mkdir test [root@host1 ~]# cd test [root@host1 test]# mkdir -p test_123 test_abc test_xyz testlog [root@host1 test]# cd testlog/ [root@host1 testlog]# echo "Test log" > test.log [root@host1 testlog]# cat cp.sh #!/bin/bash log=test.log for dir in `find /root/test -name "test_*"` do cp $log $dir done [root@host1 testlog]# bash -x cp.sh + log=test.log ++ find /root/test -name 'test_*' + for dir in '`find /root/test -name "test_*"`' + cp test.log /root/test/test_xyz + for dir in '`find /root/test -name "test_*"`' + cp test.log /root/test/test_abc + for dir in '`find /root/test -name "test_*"`' + cp test.log /root/test/test_123 [root@host1 testlog]# cat /root/test/test_123/test.log Test log
使用脚本写的命令,是可以强制覆盖原先有的文件的,而没有提示,我们验证下:
[root@host1 testlog]# echo "Test log once" > test.log [root@host1 testlog]# bash cp.sh [root@host1 testlog]# cat /root/test/test_123/test.log Test log once
但是如果我们在命令行使用cp命令,则会提示是否需要覆盖:
[root@host1 testlog]# cp test.log /root/test/test_123/ cp:是否覆盖"/root/test/test_123/test.log"? y
解决这个问题的方法很简单,只需在前面加上"\":
[root@host1 testlog]# echo "Test log once again" > test.log [root@host1 testlog]# \cp test.log /root/test/test_123/ [root@host1 testlog]# [root@host1 testlog]# cat /root/test/test_123/test.log Test log once again
这样就可以解决每次覆盖敲y的烦恼了,是不是很棒^_^
当然还可以取消别名或者修改别名,但是比较麻烦,用完之后还要恢复回来,如果忘记修改回来,对以后的工作可能会造成麻烦哦!