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