
スクリプトでこのコードを使用してフォルダー内のファイルを処理しますが、サブフォルダーに対してのみ機能します。
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