일부 파일을 복사하고 싶지만 스크립트가 끝날 때까지 복사 명령 실행을 기다리고 싶습니다. 그 이유는 사용자 입력으로 인해 스크립트가 중간에 중단될 것으로 예상할 수 있고 디렉터리를 부분적으로 복사하지 않을 것이기 때문입니다.
exit 0
동일한 프로그램에서 특정 명령이 실행될 때까지 기다리는 방법이 있습니까 ?
#!/bin/bash
for f in 'find something/ -newer something_else -type f'; do
#Expecting user input interruption
cp "$f" . #I want to wait executing this
done
if [ -f something_else ]; then
exit 0 #I want it executed here
else
exit 1
fi
답변1
가장 간단한 해결책은 나중에 복사하는 것입니다.
#!/bin/bash
# something something script stuff
[ ! -f somefile ] && exit 1
find something -type f -newer somefile -exec cp {} . ';'
사용자가 각 사본을 확인하도록 하려면 다음 -ok
대신 사용하십시오 .-exec
find
find something -type f -newer somefile -ok cp {} . ';'
먼저 파일을 반복하여 복사할 파일 목록을 만들고 사용자에게 각 파일에 대한 입력을 요청합니다.그 다음에복사를 수행하려면:
copy_these=$(mktemp)
find something -type newer somefile \
-exec bash -c '
read -p "Copy $0? [y/n/q]: "
case "$REPLY" in
[yY]*) printf "%s\n" "$0" ;;
[qQ]*) exit 1 ;;
esac' {} ';' >"$copy_these"
# do other stuff
# then copy the files
xargs cp -t . <"$copy_these"
rm -f "$copy_these"
이는 모든 파일 이름이 올바르게 작동하고(개행 없음) cp
GNU가 사용된다고 가정합니다.