폴더 내의 파일을 처리하기 위해 스크립트에서 이 코드를 사용하고 있지만 하위 폴더에서만 작동합니다.
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