자동 응답 명령 - 응답 사이에 cp 작업을 수행합니다. [해제]

자동 응답 명령 - 응답 사이에 cp 작업을 수행합니다. [해제]

아이디어는 명령을 실행하고 싶은데 처리할 파일 이름을 요청하고 처리가 완료되면 라는 이미지를 출력하고 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

관련 정보