我花了很多時間尋找解決方案。我知道必須有一個已發布的解決方案,我只是找不到它。我有一個活動目錄 (Dir1) 和一個具有相同文件名的開發 (Dir2) 目錄。內容可能不同,也可能不同,日期也是如此。使用 PHP 或 linux 命令行,我需要獲取每個文件的最新版本的目錄的遞歸列表。由于我的托管環境,我無法使用 rsync。這將為一個目錄提供一份最新修改文件的漂亮列表:find . -type f -printf '%TY-%Tm-%Td %TH:%TM: %Tz %p\n'| sort -n | tail -n20缺點是我必須手動比較輸出。這很好,但它沒有顯示哪些文件較新:diff --brief -rq www/dashboard dev.efit.health/dashboard有沒有辦法使用 diff 并讓輸出顯示哪些文件較新?如果沒有,有人可以指出我正確的方向嗎?
1 回答
料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
給定以dir1和為根的兩個文件層次結構dir2,其中每個層次結構都包含完全相同的文件名集,您可以使用 find 命令的變體來列出每對文件中較新的文件。
如果時間戳匹配,此代碼將隨機打印一個文件,但您可以通過適當的過濾選擇其他一些行為。
shownewer(){
find "$1"/ "$2"/ -type f -printf '%T@ :%p\n' |\
sort -r |\
sort -t/ -s -k2,2 |\
sed 's/^[0-9.]* ://;n;d'
}
find 打印帶有時間戳的文件(自紀元以來的小數秒)
sort反向按時間戳的第一個訂單
第二個sort忽略頂級目錄并按路徑的剩余部分排序
sed 打印每對的第一個文件
警告:如果文件夾不包含完全相同的文件集,則輸出可能完全錯誤。一次刪除可能真的把事情搞砸了。
使用以下內容進行測試:
# create test data
$ mkdir dir1 dir2
$ touch {dir1,dir2}/{1,2,3,4,5}
$ sleep 1
$ touch dir1/2 dir2/{3,5}
$ shownewer dir1 dir2
dir2/1
dir1/2
dir2/3
dir2/4
dir2/5
- 1 回答
- 0 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消
