conv.sh
현재 디렉토리의 MP3 파일을 반복하여 OGG로 변환하는 스크립트가 있습니다 . 또한 {F1, F2,..., F20}이 있는 여러 디렉터리가 있습니다 . 이 모든 디렉터리에서 /path/to/Files/
어떻게 실행해야 합니까 ?conv.sh
답변1
이 시도
curdir=$(pwd)
for folder in /path/to/Files/*; do
[ -d "$folder" ] && cd "$folder" && ./conv.sh
done
cd $curdir
또는 당신이 그렇다고 가정하면 /path/to/Files/
이것도 작동합니다
for f in *; do [ -d "$f" ] && cd "$f" && ./conv.sh; done; cd ..
F{1..20}
더 나은 정확도를 얻으 려면 대체를 사용할 수 있습니다 *
.
답변2
답변3
xargs 또는 GNU 병렬 처리를 사용할 수 있습니다.
echo /path/to/Files/F{1..20} | tr ' ' '\n' |
xargs -L conv.sh
또는:
echo /path/to/Files/F{1..20} | tr ' ' '\n' |
parallel conv.sh
편집 - 공간을 현명하게 처리
Ole이 지적했듯이 위의 방법 중 어느 것도 공백을 올바르게 처리하지 않습니다. 즉, dir name
두 개의 별도 인수로 처리되며 디렉터리 이름에 개행 문자가 포함된 경우 동일한 문제가 발생합니다.
이러한 문제를 해결하는 가장 좋은 방법은 예를 들어 GNU find를 사용하여 null을 구분 기호로 사용하는 것입니다.
find /path/to/Files -mindepth 1 -maxdepth 1 -type d -regex '.*/F[0-9]*' -print0 |
parallel -0 conv.sh