いくつかのファイルをコピーしたいのですが、スクリプトが終了するまでコピーコマンドの実行を待ちたいと思います。その理由は、ユーザーの入力によってスクリプトが途中で中断されることが予想され、ディレクトリを部分的にコピーしないためです。
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が使用されていると仮定します。