在使用rsync備份目錄時要養成加斜槓的習慣
常用的選項: (-a -v --delete
--exclude
),
rsync常用選項
-a 歸檔模式,表示以遞歸方式傳輸文件,並保持所有屬性,等同於-rlptgoD, -a選項後面可以跟一個 --no-OPTION
這個表示關閉-rlptgoD中的某一個例如 -a--no-l
等同於-rptgoD
-r 對子目錄以遞歸模式處理,主要是針對目錄來說的,如果單獨傳一個文件不需要加-r,但是傳輸的是目錄必須加-r選項
-v 打印一些信息出來,比如速率,文件數量等
-l 保留軟鏈結
-L 向對待常規文件一樣處理軟鏈結,如果是SRC中有軟連接文件,則加上該選項後將會把軟連接指向的目標文件拷貝到DST
-p 保持文件權限
-o 保持文件屬主信息
-g 保持文件屬組信息
-D 保持設備文件信息
-t 保持文件時間信息
--delete
刪除那些DST中SRC沒有的文件
--exclude=PATTERN
指定排除不需要傳輸的文件,等號後面跟文件名,可以是萬用字符模式(如*.txt)
--progress
在同步的過程中可以看到同步的過程狀態,比如統計要同步的文件數量、同步的文件傳輸速度等等
-u 加上這個選項後將會把DST中比SRC還新的文件排除掉,不會覆蓋
xargs應用
就是把管道符前面的輸出作爲xargs後面的命令的輸入。它的好處在於可以把本來兩步或者多步才能完成的任務簡單一步就能完成。xargs常常和find命令一起使用,比如,查找當前目錄創建時間大於10天的文件,然後再刪除。
[root@localhost ~]# find . -mtime +10 |xargs rm
這種應用是最爲常見的,xargs後面的rm 也可以加選項,當是目錄時,就需要-r選項了。在阿銘看來xargs的這個功能不叫什麼,它的另一個功能才叫神奇。現在我有一個這樣的需求,查找當前目錄下所有.txt的文件,然後把這些.txt的文件變成.txt_bak。正常情況下,我們不得不寫腳本去實現,但是使用xargs就一步。
[root@localhost ~]# mkdir test [root@localhost ~]# cd test [root@localhost test]# touch 1.txt 2.txt 3.txt 4.txt 5.txt [root@localhost test]# ls 1.txt 2.txt 3.txt 4.txt 5.txt [root@localhost test]# ls *.txt |xargs -n1 -i{} mv {} {}_bak [root@localhost test]# ls 1.txt_bak 2.txt_bak 3.txt_bak 4.txt_bak 5.txt_bak
xargs -n1 –i{} 類似for循環,-n1意思是一個一個對象的去處理,-i{}把前面的對象使用{}取代,mv {} {}_bak 相當於 mv 1.txt 1.txt_bak。
2. exec應用
使用find命令時,經常使用一個選項就是這個-exec了,可以達到和xargs同樣的效果。比如,查找當前目錄創建時間大於10天的文件並刪除:
[root@localhost ~]# find . -mtime +10 -exec rm -rf {} \;
這個命令中也是把{}作爲前面find出來的文件的替代符,後面的 \
爲 ;
的脫意符,不然shell會把分號作爲該行命令的結尾。這個-exec有時候也挺實用的,它同樣可以實現剛剛上面批量更改文件名的需求:
[root@localhost test]# ls 1.txt_bak 2.txt_bak 3.txt_bak 4.txt_bak 5.txt_bak [root@localhost test]# find ./*_bak -exec mv {} {}_bak \; [root@localhost test]# ls 1.txt_bak_bak 2.txt_bak_bak 3.txt_bak_bak 4.txt_bak_bak 5.txt_bak_bak