아래의 두 가지 입력 사용 시나리오에서 이 스크립트가 작동하도록 하려면 어떻게 해야 합니까?
#1 ./script.sh
#2 ./script.sh input.file
콘텐츠script.sh
for i in *.mp4; do ffmpeg -i "$i" "${i%.*}.mp4
#1
위의 파일 내용은 모든 파일이 대상이 되는 디렉토리에서 실행을 특별히 허용하기 때문에 스키마 는 현재 작동하는 유일한 것입니다 script.sh
..mp4
#1
전체 디렉터리 대신 개별 파일을 대상으로 지정하면서도 다른 사용 시나리오를 항상 사용할 수 있도록 유지하는 것도 가능합니까 ?
업데이트: 이것이 그가 언급한 질문과 어떤 관련이 있는지 이해가 되지 않습니다.
답변1
매개변수를 경로로 사용하면 됩니다. 간단한 트릭을 사용할 수 있습니다. /path/to/dir/./
이후와 동일하며 "현재 디렉터리"를 의미합니다. 따라서 이 간단한 경우에는 다음을 수행합니다./path/to/dir/
./
#!/bin/bash
for i in "$1"./*.mp4; do
ffmpeg -i "$i" "${i%.*}.mp4";
done
그런 다음 다음과 같이 스크립트를 실행하십시오.
cd /path/to/mp4; /path/to/script.sh
또는 다음과 같습니다(마지막 슬래시가 필수입니다).
/path/to/script.sh /path/to/mp4/
이를 수행하는 일반적인 방법은 다음과 같습니다.
#!/bin/bash
## Assign the 1st argument to the variable "target"
target=$1
## If $target has no value (if $1 was empty), set it to "."
target=${target:="."}
for i in "$target"/*.mp4; do
ffmpeg -i "$i" "${i%.*}.mp4";
done
변수는 실제로 필요하지 않습니다. 다음과 같이 할 수 있습니다.
#!/bin/sh
for i in ${1-.}/*.mp4; do
echo ffmpeg -i "$i" "${i%.*}.mp4";
done
또는:
#!/bin/sh
if [ -z "$1" ]; then
target="."
else
target="$1"
fi
for i in "$target"/*.mp4; do
ffmpeg -i "$i" "${i%.*}.mp4";
done