Bash

根據整數數組過濾文件列表?

  • May 19, 2019

我有一個包含大量圖像的文件夾,名為“ clip01234-randomlongstring.png ”,其中01234是一個隨機的五位數字。我還有一個帶有整數列表的數組“ clipnumbers ”。

現在我想創建一個列表“文件”,其中包含與“ clipnumbers ”數組中的數字匹配的所有文件名。我該怎麼做?

結果輸出應該是我可以用與我創建的目前列表(所有文件)相同的方式處理的東西: files=($(printf "%s\n" *.* | sort -V | tr '\n' ' '))

在一個循環中:

shopt -s nullglob

files=()
for number in "${clipnumbers[@]}"; do
   printf -v pattern 'clip%s-*.png' "$number"
   files+=( $pattern )
done

這會循環數字並為每個數字創建一個文件名通配模式。該模式被擴展以將與其匹配的文件名添加到數組files中。shell 選項使不匹配的nullglob模式擴展為空(而不是保持未擴展)。


使用find(用於遞歸到目前目錄下的所有目錄,並對每個找到的文件執行一些操作):

patterns=()
for number in "${clipnumbers[@]}"; do
   printf -v pattern 'clip%s-*.png' "$number"
   patterns+=( -o -name "$pattern" )
done

find . -type f \( "${patterns[@]:1}" \) -exec action-to-perform-on-files {} \;

從擴展中的列表中:1刪除首字母。-o``patterns

這結合了搜尋文件和對它們執行一些操作。如果您的數組包含數千個數字,它將失敗clipnumbers(參數列表會變得太長)。

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