在一個"tarball"中(經過 tar 和 gzip 處理過的文件)備份最後 24 小時之內當前目錄下所有修改的文件。 程式代碼如下: ~~~~ !/bin/bash BACKUPFILE=backup $(date +%y %m %d) 在備份文件中嵌入時間。 archive=${1: $BAC ...
在一個"tarball"中(經過 tar 和 gzip 處理過的文件)備份最後 24 小時之內當前目錄下所有修改的文件。
程式代碼如下:
#!/bin/bash
BACKUPFILE=backup-$(date +%y-%m-%d)
# 在備份文件中嵌入時間。
archive=${1:-$BACKUPFILE}
# 如果在命令行中沒有指定備份文件的文件名,那麼將預設使用"backup-YYYY-MM-DD"文件名。
tar cvf - `find . -mtime -1 -type f -print` > $archive.tar
gzip $archive.tar
echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."
exit 0
註意
如果在發現太多的文件的時候,或者是如果文件名包括空格的時候,將執行失敗。
建議使用下邊的兩種代碼之一
# -------------------------------------------------------------------
# find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"
# 使用 gnu 版本的 find
# find . -mtime -1 -type f -exec tar rvf "$archive.tar" '{}' \;
# 對於其他風格的 UNIX 便於移植,但是比較慢。
# -------------------------------------------------------------------
find 的 -exec 選項舉例說明
找出當前目錄下所有 .txt 文件並以 “File: 文件名” 的形式列印出來:
find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;
上例中,{} 用於與-exec選項結合使用來匹配所有文件,然後會被替換為相應的文件名。
xargs 的 -0 選項
xargs -0 將 \0 作為定界符。