folder1
파일 만 .flv
포함됩니다.
folder2
파일 만 .mp4
포함됩니다.
의 모든 파일에는 다음으로 끝나는 해당 파일이 .flv
있어야 합니다 .folder1
.mp4
folder2
/folder1/123.flv
그리고 /folder2/123.mp4
.
.flv
누락된 스크립트를 찾아 .mp4
해당 스크립트를 생성하기 위해 mencoder를 실행하는 스크립트가 필요합니다 .mp4
. 최선을 다해 이렇게 생각해 냈지만 여전히 IF THEN 문에 갇혀 있습니다.
for i in `find /folder1 -type f -iname '*.flv' -printf "%f\n" |
sed 's/.flv//g'` ; do
if [[ -n $(find /folder2/$i.mp4 -exec grep \-q 0 {} \;) ]] then
/scripts/script.sh $i fi ; done
Bash 스크립트는 다음과 같이 실행되어야 합니다:
/scripts/script.sh $i
따라서 파일 이름에는 확장자가 없습니다.
답변1
이 시도:
find folder1 -type f -iname '*.flv' -exec bash -c \
'f=${1#folder1/}; [ -f "folder2/${f%.flv}.mp4" ] ||
scripts/script.sh "${1%.flv}"' none {} \;
이는 이름에 공백이나 기타 어려운 문자가 포함된 파일에 적용됩니다.
어떻게 작동하나요?
find folder1 -type f -iname '*.flv'
flv 파일을 찾습니다.
-exec bash -c '...'
발견된 각 flv 파일에 대해 이는 따옴표로 묶인 스크립트를 실행하는 bash를 실행하도록 find에 지시합니다(아래 참조).
f=${1#folder1/}
f
그러면 flv 파일 이름을 사용하지만 선행 디렉터리는 없는 변수가 생성됩니다 .[ -f "folder2/${f%.flv}.mp4" ]
해당 mp4 파일이 존재하는지 테스트합니다.
||
이는 이전 명령이 false를 반환하는 경우(즉, 해당 mp4 파일을 찾을 수 없는 경우)에만 bash에게 다음 명령을 실행하도록 지시합니다.
scripts/script.sh "${1%.flv}"'
그러면 mp4 파일이 누락된 flv 파일에 대해 스크립트가 실행됩니다. 이 섹션은 제공된 파일
script.sh
에서 제거되었습니다.flv
.none {}
none
이는 bash 에게 문자열을 할당하고$0
(이 자리 표시자는 사용되지 않음) 에서 찾은 파일 이름find
( 으로 표시됨{}
)을 쉘 변수에 할당하도록 지시합니다$1
.\;
이것은 find 명령의 끝을 표시합니다
-exec
.