아이디어는 명령을 실행하고 싶은데 처리할 파일 이름을 요청하고 처리가 완료되면 라는 이미지를 출력하고 prediction.png
다음 파일 이름을 묻는 식으로 진행된다는 것입니다. 수천 개의 파일이 있어서 일일이 수동으로 입력할 수 없습니다. 그러나 모든 파일 이름이 포함된 .txt 파일이 있습니다.
그래서 저는 bash 스크립트를 작성하고 싶습니다:
1-명령을 실행합니다
2- 파일 이름을 물으면 txt 파일의 첫 번째 줄을 읽습니다.
3- 프로그램은 파일을 처리하고 이미지를 출력한 다음 이미지를 다른 디렉터리에 복사합니다(다음 파일을 덮어쓰는 것을 방지하기 위해).
4- 그런 다음 다음 것을 요청하고 동일한 작업을 수행합니다.
프로그램이 파일을 요청하고 .txt 파일이 완료될 때까지 자동으로 종료됩니다.
지금까지 내가 할 수 있는 일은 파일을 하나씩 읽고 프로그램이 요청할 때 응답으로 전달하는 것뿐입니다.
cat filenames.txt | ./program.sh
cp
문제는 새 파일을 처리하기 전에 출력 하고 싶다는 것입니다
답변1
program.sh
계속해서 파일을 생성하고 파일이 언제 완성될지 확신할 수 없기 때문에 한 번만 실행하는 동안에는 이 작업을 수행 할 수 없을 것 같습니다 .
대신, filenames.txt의 각 줄에 대해 프로그램을 한 번씩 실행하세요.
while IFS= read -r FILE; do # loop through files in filenames.txt
echo "$FILE" | ./program.sh # run program once and end it with newline
mv created_filename /some/other/location/${FILE}.ext; # move file
done < filenames.txt
mv
대신 사용cp
하면 동일한 파일 시스템으로 이동하는 것이 더 빠릅니다.- 출력 형식을 변경합니다
.ext
(예.png
: ).
답변2
다음을 수행할 수 있습니다.
(
while IFS= read -r FILE; do
echo "$FILE"
sleep 1 # or somehow make a trigger to see when the file is ready ...
mv output_file /somewhere/else
done < filenames.txt;
) | ./program.sh
(통과하다)
xargs를 사용해도 동일합니다.
(
xargs -a filenames.txt -I{} sh -c 'echo {}; sleep 1; mv file /somewhere/else'
) | ./program.sh