簡體   English   中英

在Terminal / Linux上查找包含特定日期范圍文件名的所有文件

[英]Find all files containing the filename of specific date range on Terminal/Linux

我有一個監視攝像頭,它根據我給定的條件拍攝圖像。 圖像保存在我的Linux上。 圖像命名慣例如下 -

CAPTURE04.YYYYMMDDHHMMSS.jpg

該目錄包含以下文件 -

CAPTURE04.20171020080501.jpg
CAPTURE04.20171021101309.jpg
CAPTURE04.20171021101913.jpg
CAPTURE04.20171021102517.jpg
CAPTURE04.20171021103422.jpg
CAPTURE04.20171022103909.jpg
CAPTURE04.20171022104512.jpg
CAPTURE04.20171022105604.jpg
CAPTURE04.20171022110101.jpg
CAPTURE04.20171022112513.jpg ... and so on.

但是,實際上,現在我正在嘗試使用terminal命令找到一種在特定日期時間(文件名)范圍之間獲取所有文件的方法。 注意:需要遵循文件名(YYYYMMDDHHMMSS),而不是文件創建/修改時間。

比如我需要獲取文件名在2017-10-20 08:30:00和2017-10-22 09:30:00之間的所有文件

我正在嘗試搜索谷歌並得到以下命令 -

find -type f -newermt "2017-10-20 08:30:00" \! -newermt "2017-10-22 09:30:00" -name '*.jpg'

它返回在給定日期范圍內創建/修改的文件。 但我需要根據給定的文件名范圍查找文件。 所以我認為這對我的情況不起作用。

也嘗試使用以下命令 -

find . -maxdepth 1 -size +1c -type f \( -name 'CAPTURE04.20171020083000*.jpg' -o -name 'CAPTURE04.2017102209300*.jpg' \) | sort -n

這不起作用.. :(

請幫我寫下實際的命令。 提前致謝。

完整的find + bash解決方案:

find . -type f -regextype posix-egrep -regex ".*CAPTURE04\.[0-9]{14}\.jpg" -exec bash -c \
'fn=${0##*/}; d=${fn:10:-4}; 
 [[ $d -ge 20171020083000 && $d -le 20171022093000 ]] && echo "$0"' {} \;

  • fn=${0##*/} - 獲取文件基

  • d=${fn:10:-4} - 從文件的basename中提取datetime部分

  • [[ $d -ge 20171020083000 && $d -le 20171022093000 ]] && echo "$0" - 僅當日期時間 “section”在指定范圍內時才打印文件路徑

一種方式(bash),而不是優雅的方式:

ls  CAPTURE04.2017102008{30..59}*.jpg CAPTURE04.2017102009{00..30}*.jpg 2>/dev/null

使用maxdepth選項意味着所有文件都在當前目錄中,因此可以使用globs在循環中完成

for file in CAPTURE04.201710{20..22}*.jpg; do
    if [[ $file > CAPTURE04.20171020083000 && $file < CAPTURE04.2017102209300 ]]; then
        ... do something with "$file"
    fi
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM