
我在腳本中使用此程式碼來處理資料夾內的文件,但它僅適用於子資料夾。
if [ -d "$1" ]; then for file in "${1%/}/"*/*(*.mkv|*.mp4|*.avi); do
我知道我可以刪除/*
以使用平面資料夾,但我正在尋找一種更乾淨的方法來處理平面資料夾(無子資料夾)和帶有子資料夾的資料夾。
我在 for 循環中有大量程式碼,所以我不想要依賴的解決方案find
答案1
嘗試globstar
並extglob
具體針對bash
#!/usr/bin/env bash
shopt -s globstar extglob
if [[ -d $1 ]]; then
for file in "$1"/**/*.@(mkv|mp4|avi); do
:
done
fi
答案2
我在 for 循環中有大量程式碼,所以我不想要依賴的解決方案
find
如果將for
循環更改為while
循環並使用read
,則很容易依賴,find
而無需進一步重構循環內部的內容:
find "$1" -name "*.mkv" -o -name "*.mp4" -o -name "*.avi" -print0 | \
while read -d '' file; do
# Process file
done