Bash

如何知道我目前使用者創建的最後一個文件的位置?

  • April 14, 2018

我使用帶有 Bash 4.3.48(1) 和zip3.0 的 Ubuntu 16.04 (xenial)。

在包含具有許多不同功能的 bash 腳本 ( #!/bin/bash) 的文件中,我還使用此功能在一個 zip 文件中創建完整的數據庫備份 + 文件根備份

imb() {
   drt="/var/www/html"
   date="$(date +%F-%T)"
   mysqldump -u root -p --all-databases | zip "$drt/db-$date.zip" - # Note the hyphen before this comment;
   zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"
   rm -f "$drt/db-$date.zip"
}

我獲取了上述文件 ( source ~/function.sh) 並imb在調試模式 ( set -x) 下執行:

我被提示輸入數據庫密碼,然後過了一段時間(表明創建了數據庫備份)。此外,出現了一個詳細的 zip(太長而無法在終端中粘貼或跟踪),表明文件根目錄下的所有內容都已壓縮。

然而,沒有備份出現在/var/www/html/.

我的問題

由於評論,我覺得我應該問兩個問題,我發現它們相似但實際上不同:

  1. zip 將我的文件放在哪裡(例如,假設這不是手動創建意義上的“文件創建” touch)?當然,由程序創建並位於某處的文件不一定歸我的使用者所有。
  2. 我如何找出目前使用者創建的最後一個文件的位置?

我希望它位於/var/www/html/

zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"

但不是。如果不從根 () 開始在系統的整個文件樹上執行,我不知道一種有效的方法來知道它是在哪裡創建的/,因為這可能需要幾個小時在該機器上。

更新

在寫這個問題時,我訪問了我的主目錄($HOME/),在那裡我找到了該文件,但我不知道為什麼它是在文件根目錄下創建的。

zip -r "all_zipped-$date.zip" "$drt"/ -x "*/cache/*"

在目前目錄中創建一個存檔,不管它是什麼(在這種情況下是你的主目錄)。

如果你想在 中創建存檔${drt},你需要告訴zip

zip -r "${drt}/all_zipped-$date.zip" "$drt"/ -x "*/cache/*"

沒有簡單的方法可以找出任何給定使用者創建的最後一個文件的位置。您需要find通過減少時間戳來使用和排序。使用最後修改時間作為創建時間的近似值:

find . -user user9303970 -printf "%T@ %p\n" | sort -n -k1,1 -r | head -n 1

引用自:https://unix.stackexchange.com/questions/437753