我正在制作一個 bash 腳本,以便在每天生成檔案的目錄中運行,并將最新的檔案復制到另一個目錄。
我現在正在使用這個
for [FILE in directory]
do
if [ls -Art | tail -n 1]
something...
else
something...
fi
done
我知道這不行。我想將檔案的修改日期與當前日期進行比較,如果相等,則復制該檔案。
這將如何作業或有更簡單的方法來做到這一點?
uj5u.com熱心網友回復:
我們可以使用find:
find . -maxdepth 1 -daystart -type f -mtime -1 -exec cp -f {} dest \;
解釋:
-maxdepth 1將搜索限制為當前目錄。-daystart將 的參考時間設定-mtime為今天的開始。-type f將搜索限制為檔案。-mtime -1將搜索限制為自參考時間起不到 1 天修改過的檔案。-exec cp -f {} dest \;將找到的檔案復制到目錄dest.
請注意,這-daystart -mtime -1意味著今天 00:00(包括)之后的任何時間,也包括明天或未來的任何時間。因此,如果您有上次修改時間為 2042 年的檔案,它們也會被復制。-mtime 0如果您更喜歡處理在今天 00:00(不包括)和明天 00:00(包括在內)之間修改過的檔案,請使用。
另請注意,所有這些都可能受到夏令時或閏秒(未測驗)等違規行為的影響。
uj5u.com熱心網友回復:
最新的檔案與今天修改的檔案不同。
使用ls實際上是一種非常簡單且可移植的方法。stdout 輸出格式由 POSIX 定義(如果不列印到終端),并且ls -A也在較新的 POSIX 標準中。
不過它應該看起來更像這樣:
newest=$(ls -At | head -n 1)
您可以添加-1,但它AFAIK 不應該是必需的,因為它不會列印到終端。
如果你不想使用ls,你可以在 linux 上使用它:
find . -mindepth 1 -maxdepth 1 -type f -exec stat -c ‘%Y:%n’ {} |
sort -n |
tail -n 1 |
cut -d : -f 2-
注意使用2-not 2with cut,以防檔案名包含:.
此外,生成的檔案名將是相對路徑 ( ./file),如果不存在檔案,則為空字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341829.html
