批量复制(删除)指定目录文件的脚本


本脚本用于迁移不同目录中的批量文件到远程目录(也可以在本地不同目录间进行迁移),需要先将所有需要迁移的文件路径整理到一个文档list.txt中(文件名可以自定义),文档中每行一个文件路径。
远程迁移:
#!/bin/bash
cd /../.. //进入list.txt所在目录
remoteuser=用户名
remotepassword=密码
remoteip=远程主机IP
echo start
while read line
do
echo sending file $line
sshpass -p $remotepassword rsync -aR -e 'ssh -p 端口' $line $remoteuser@$remoteip:/gfs_mnt/data1/transform --log-file=/var/log/rsync_`date +%Y-%m-%d`.log
done<list.txt
echo finish

本地迁移:
#!/bin/bash
cd /../.. //进入list.txt所在目录
echo start
while read line
do
echo sending file $line
rsync -aR $line /目标目录 --log-file=/var/log/rsync_`date +%Y-%m-%d`.log
done<list.txt
echo finish

-R 使用相对路径信息。
使用-R可以保持路径不变,比如拷贝/mnt/a.txt 文件到 /home下
如果不加-R,则拷贝后文件路径为/home/a.txt
加-R,则拷贝后文件路径为/home/mnt/a.txt

如果要拷贝/mnt/a/b/1.txt /mnt/c/d/2.txt 到 /home/下,同时还要保留a/b/c/d的目录层级,即拷贝后文件目录为 /home/a/b/1.txt 和 /home/c/d/2.txt
则可以将line文件和脚本放到/mnt下,line文件中使用./相对目录,脚本中加 -R
---------------------------------------------------------------------------
删除指定文件(将需要删除的文件路径放到/del/del.txt中)
#!/bin/bash
cd /del/
echo start >> /del/del.log
while read line
do
echo sending file $line >> /del/del.log
rm -f $line
done<del.txt
echo finish >> /del/del.log
备注:
1、会循环按行删除
2、不能直接使用windows下的文本文件,需要替换成linux下的换行符才可以
换行符修改方法https://www.xianmoyi.com/?p=1246#more-1246