サブフォルダとフラットフォルダを同時にループする

サブフォルダとフラットフォルダを同時にループする

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

if [ -d "$1" ]; then for file in "${1%/}/"*/*(*.mkv|*.mp4|*.avi); do 

フラット フォルダーを操作するには削除するだけでよいことはわかっています/*が、フラット フォルダー (サブフォルダーなし) とサブフォルダーを含むフォルダーの両方を処理するためのよりクリーンな方法を探しています。

forループに長いコードがあるので、find

答え1

試してみてglobstarextglobそれが特定の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

関連情報