按日期複製文件

按日期複製文件

如何根據文件的上次編輯時間複製資料夾中的文件?假設我想複製我的所有文件今天最後編輯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,但這裡肯定有人可以做到這一點(提示,提示)...

答案2

您可以先使用命令指定目前資料夾中最後修改的文件

ls -lt

或者,您想要使用命令指定最後訪問的文件

ls -ltu

之後,您可以使用cp命令複製該檔案。若要複製多個文件,請參閱

相關內容