Bash

過濾文件列表以僅在某個文件之後按字母順序顯示文件

  • April 23, 2022

我有大量的圖像,我想ffmpeg不時提供一些圖像。但我只想提供在某些圖像****之後按字母順序排列的圖像(上一次執行的最後一幀,名稱儲存在某個文件中)。

例如,我可以找出那個文件的訂單/索引號,然後執行head/tail使用該號碼嗎?

還是有一些-pattern_type glob我可以用作ffmpeg -i參數的魔法?

迄今為止最好的過濾解決方案似乎是這樣,但它似乎有點沉重

find . -maxdepth 1 -type f | sort |  awk '$0 > "./picture_2022-04-22_13-46-12.jpg"'

一種替代方法是將列表放入文本文件中,在那裡進行解析並將文本文件提供給 ffmpeg,但我想有一些更簡單的方法嗎?

排序後, some sedorawk可用於匹配從模式到流結束。我假設您的最終ffmpeg命令接受文件參數列表。我用 aprintf而不是ffmpeg下面。

find . -type f -print0 | sort -z | sed -nz '/pattern/,$p' | xargs -r0 printf '%s\n'

使用 GNU 參數分隔。sed命令過濾排序的參數,從模式(包括)到流的末尾。

如果您想從模式中獲取文件,直到,而不是結束,而是直到第二個模式,唯一的修改是 . sed,它變成sed -zn '/pattern1/,/pattern2/p'.

對於我們不測試正常文件的情況(深度 1),一個較短的替代方案是:

printf '%s\0' ./*.jpg | sed -nz '/pattern/,$p' | xargs -r0 printf '%s\n'

在第一步之後,這裡的文件已經按字母順序排序。

此外,您可以與一個字元串進行比較,不一定存在於文件名中,不包括或包括,最awk好像你已經做的那樣使用。例如,獲取所有命名日期晚於的文件2022-01

printf '%s\0' ./*.jpg | awk 'BEGIN {RS=ORS="\0"} $0 > "./picture_2022-01"' | xargs -r0 printf '%s\n'

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