將通過find命令找到的文件拷貝到一個新的目錄中
有這樣的一個需求,需要將一部分符合條件的文件從一個目錄拷貝到另一個目錄中,我通過find命令從源目錄查找到符合條件的文件然後使用cp命令拷貝到目標目錄:
方法一 命令如下:
find src_dir -name "access.log.2011102[2-6]*" -exec cp {} dst_dir \;
拷貝文件到遠程主機上的目標目錄的命令:
find src_dir -name "access.log.2011102[2-6]*" -exec scp {} 用戶名@主機ip:dst_dir \;
方法二 find src_dir -name "access.log.2011102[2-6]*" |xargs -i cp {} dst_dir
或
find src_dir -name "access.log.2011102[2-6]*" |xargs -I {} cp {} dst_dir
拷貝文件到遠程主機上的目標目錄的命令:
find src_dir -name "access.log.2011102[2-6]*" |xargs -i scp {} 用戶名@主機ip:dst_dir
或
find src_dir -name "access.log.2011102[2-6]*" |xargs -I {} scp {} 用戶名@主機ip:dst_dir
src_dir 源目錄
dst_dir 目標目錄
access.log.2011102[2-6]* 文件名的正則表達式,獲取文件的條件
方法三 find命令結合cp命令,拷貝某個目錄下所有文件到另一個目錄中
要求整個目錄完全拷貝到另一個目錄,並且忽略個別目錄,腳本如下:
find ./ -path '/tmp/mnt/disk1/ignore' -prune -o \( -name '*' ! -name "*.tmp" \) | xargs cp "目的目錄" "{}" \;
在上面這個腳本中,當執行到“| xargs cp”時,假設輸入的字符串類似如下:
/tmp/mnt/disk1/tt.txt
/tmp/mnt/disk1/test/dd.txt
要求執行“xargs cp”後,相應拷貝成如下的目錄結構
(即:原來disk1目錄下所有文件都拷貝到src目錄下,目錄結構不變):
/tmp/mnt/src/tt.txt
/tmp/mnt/src/test/dd.txt