我在脚本中使用此代码来处理文件夹内的文件,但它仅适用于子文件夹。
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