Linux
如何根據文件的時間戳(當月的日期)將文件複製到另一個目錄?
假設我在 dir1 中有這些文件:
-rw-r--r-- 1 user user 10240 Jul 2 11:54 10_data.txt -rw-r--r-- 1 user user 36048 Jul 4 11:56 95_data.txt -rw-r--r-- 1 user user 35634 Jul 7 11:56 01_data.txt -rw-r--r-- 1 user user 10630 Jul 9 11:56 19_data.txt -rw-r--r-- 1 user user 35476 Jul 9 11:57 93_data.txt
我希望能夠根據它們的時間戳複製這些文件,特別是一個月中的某一天(2、4、7 和 9)。
前任:
copy 10_data.txt into a directory called 02 copy 19_data.txt into a directory called 09 copy 93_data.txt into a directory called 09
目標目錄(01、02、03 等)已經存在,因此無需創建它們或任何東西。我計劃每天午夜後將其作為 cron 作業執行。
我可以
find
與此任務一起使用(date +%d)
或類似的東西嗎?謝謝!
stat
是您了解文件何時被修改、文件大小或大多數ls
將顯示的文件屬性的朋友。例如,在 FreeBSD 上,
stat -f %Sm -t %d -- foo
將顯示文件最後一次修改的月份日期foo
,這似乎是您所追求的。不需要
find
,您可以直接遍歷文件,例如在此bash
範例中:for f in *; do d=$(stat -f %Sm -t %d -- "$f") cp -p -- "$f" $d/ done
回應您關於您的目標作業系統是 RedHat 的評論,RedHat 的
stat
實用程序似乎沒有 FreeBSD 所具有的格式靈活性。您可以在此處比較手冊頁。您可能會發現該命令
date -r foo "+%d"
是合適的替代品。腳本的相關行將變為:d=$(date -r "$f" "+%d")
如果你有 zsh 可用,你可以用它的zstat 模組來做到這一點:
zmodload zsh/stat for f in *.txt do cp -p -- "$f" $(zstat -F %d +mtime "$f")/ done
該
zstat -F %d +mtime
命令要求提供文件修改時間的當月日期-F %d
的格式化輸出 ( ) 。生成的十進制數在 01 到 31 的範圍內,並用作命令的目標。cp