Bash
根據整數數組過濾文件列表?
我有一個包含大量圖像的文件夾,名為“ 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
(參數列表會變得太長)。