如何在Bash脚本中避免此类代码重复?

时间:2014-07-20 22:12:17

标签: bash function shell subshell

在我的一个Bash脚本中,我重复了两次这样的代码:

    find "$source_dir" -type f \
            -iname "*.arw" \
            -or -iname "*.cr2" \
            -or -iname "*.crw" \
            -or -iname "*.jpeg" \
            -or -iname "*.jpg" \
            -or -iname "*.nef" \
            -or -iname "*.nrw" \
            -or -iname "*.orf" \
            -or -iname "*.pef" \
            -or -iname "*.png" \
            -or -iname "*.ptx" \
            -or -iname "*.raf" \
            -or -iname "*.raw" \
            -or -iname "*.rw2" \
            -or -iname "*.sr2" \
            -or -iname "*.srf" \
            -or -iname "*.srw" \
            -or -iname "*.tif" \
            -or -iname "*.tiff" \
            -or -iname "*.x3f" | (

     counter=0

     while read image_file; do
            (...)

有两个这样的find命令都在不同的目录上执行,但具有完全相同的参数。每个发现的结果以不同的方式处理。我确信在这里可以避免代码重复。有没有办法将此find命令包装到一个函数中,该函数将查找结果存储在某些数据结构中?必须将此类数据结构传递给遍历其项目的子shell。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

将find命令包装为函数

function myfind() {
   find ....
}

然后使用它就像是一个新命令

myfind | while read image_file; do ....