找到文件,然后选择mutt附件



我希望使用以下bash脚本来简化发送带有固定正文消息的附件

#!/bin/sh
echo "body of message" | mutt -s "subject" -a $(find /path/to/dir -type f -name "*$1*") -- $2 < /dev/null

但是,有时find命令会找到多个文件作为附件。有没有更具互动性的方法?例如,如果它找到文件xyz.pdf和xyz2.pdf,我可以选择一个,然后继续发送文件?

您可以将find的输出传递给select命令。它是一个循环,允许您重复地从选项列表中选择一个项目,并使用刚刚选择的值。

select attachment in $(find /path/to/dir -type f -name "*$1*"); do
    echo "body of message" | mutt -s "subject" -a "$attachment" -- "$2" < /dev/null
    break   # To avoid prompting for another file to send
done

这并不理想;如果发现任何名称中有空格的文件,它就会中断。您可以更加小心地构建文件列表(这超出了这个答案的范围),然后调用select命令。例如:

# Two poorly named files and one terribly named file
possible=("file 1.txt" "file 2.txt" $'filen3.txt')
select attachment in "${possible[@]}"; do
    echo "body of message" | ...
    break
done
#!/bin/bash
function inter {
    typeset file array i=0
    while IFS= read -r -d $'' file; do
        array[i]=$file
        ((i+=1))
    done
    if (( i == 0 )); then
        echo "no file" >&2
        exit 1
    fi
    if (( i == 1 )); then
        echo "$array"
        return
    fi
    select file in "${array[@]}"; do
        if (( REPLY>=1 && REPLY<=i )); then
            break
        fi
    done </dev/tty
    echo "$file"
}
echo "body of message" | mutt -s "subject" -a "$(find /path/to/dir -type f -name "*$1*" -print0 | inter )" -- $2 < /dev/null

相关内容

  • 没有找到相关文章

最新更新