在脚本末尾执行命令

在脚本末尾执行命令

我想复制一些文件,但我想等待执行复制命令直到脚本结束。这样做的原因是我可以预期用户输入会中途中断脚本,并且我不会部分复制目录。

有什么方法可以等待执行特定命令,直到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而不是-execin 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。

相关内容