
如何根據文件的上次編輯時間複製資料夾中的文件?假設我想複製我的所有文件今天最後編輯從C:到我的資料夾巴克。我怎樣才能做到這一點?
我知道常規複製命令可以這樣完成:
cp source destination
例如。
cp *.c bak
有什麼建議麼?
答案1
使用 find,可以透過以下方式找到最後一天修改的文件(並且僅是文件):
find . -type f -mtime 1
這樣你就可以複製它們
find . -type f -mtime 1 -exec cp {} bak/ \;
意義:尋找目前目錄(.
)下所有類型為「檔案」(-type f
)的實體,從現在起至少 1 天後修改(-mtime 1
,但這很微妙,請點擊連結以了解更多資訊),並為每個命令執行命令,cp
後面跟著與前面的條件匹配的檔案名稱和文字bak/
--- 在exec
子句中,結束分號 (轉義以避免shell 吃掉它)關閉命令,此外還意味著該命令將在每次匹配時執行一次。
請注意,資料夾中的目錄樹將被展平bak/
,因此也許使用存檔格式會更好。
例如,這是我的腳本,它會備份今天和兩天后在 tar 檔案中修改的工作目錄中的所有文件,然後將它們移至我的 Dropbox 目錄:
#! /bin/zsh
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here
rm -f $today $twodays
echo -n "Starting today and twodays backups... "
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:"
ls -lh $today $twodays
echo "Moving to Dropbox"
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status
它需要,zsh
因為我很懶,沒有嘗試適應 的數組結構bash
,但這裡肯定有人可以做到這一點(提示,提示)...