Command-Line
將目前目錄的所有內容備份到目前目錄內的子目錄中,如果不存在則創建
現在我有以下命令將目前目錄的所有內容複製到子目錄,前提是子目錄是提前創建的:
cp -p !($PWD/bakfiles2) bakfiles2/
但是有時我必須訪問那些我以前從未訪問過的文件夾,因此那裡可能不存在子目錄“bakfiles2”,我能否以某種方式創建具有目前時間戳的備份目錄(以避免與任何現有目錄發生衝突),在使用單個複制命令或 bash 腳本時會飛嗎?
如果腳本可以忽略以特定模式開頭的任何子目錄,然後可以為
backup
目錄名稱保留_bak_*
(注意: * 表示任意數量的任意字元),那就太好了。
cp
如果在應對時不存在,命令沒有創建目標目錄的選項,但您可以通過腳本來實現。
rsync
或者如果僅在最後一級不存在,則只需使用可以創建目標目錄的命令。rsync -rv --exclude='_bak_*/' /path/in/source/ /path/to/destination
- 請注意,
/
引入/path/in/source/
將阻止處理源目錄本身並添加--exclude
選項以不同步具有匹配名稱的目錄。
date
您可以使用命令獲取目前時間戳date +'%Y%m%d_%H%M%S'
除非您使用遞歸副本,否則您只能將目錄的內容複製到已存在的目錄中。但是,除非您希望以前的備份目錄也複製到新的備份目錄,否則您不能使用遞歸副本。
所以這必須分幾步完成
backup_dir="_bak_$(date +'%Y%m%d_%H%M%S')" mkdir "$backup_dir" cp -p !(_bak_*) "$backup_dir/"
請記住,正如所寫的那樣,這不會複製點文件(以
.
字元開頭的文件),因為這些文件通常由 shell 特殊處理。(您可能需要考慮命名您的備份目錄.bak_*
,而不是_bak_*
從該功能中受益。然後您可以cp -p * "$backup_dir/"
)沒有理由不能將它創建為一個小函式或腳本,所以它仍然只有一個命令。