有人能帮助我让这个脚本更具可读性吗?

有人能帮助我让这个脚本更具可读性吗?
SRC="/src"
export DEST="/dest"

find "${SRC}" -iname '*' -type f -exec bash -c 'EXT="${0##*.}"; EXT=${EXT,,}; if [[ "${EXT}" == *"/"* ]]; then EXT="no_extension"; fi; mkdir -p "${DEST}/${EXT}"; rsync -a "$0" "${DEST}/${EXT}"' "{}" \;

此脚本通过使用 find 迭代 SRC 文件夹中的所有文件来将 SRC 组织到 DEST,并对找到的每个文件执行以下操作:

  1. 保存文件扩展名到EXT
  2. 转换EXT为小写
  3. 是否EXT包含/字符?如果是,那么EXT="no_extension"
  4. $EXT$DEST文件夹中新建一个文件夹,命名为
  5. rsync将文件复制到刚刚创建的文件夹。-a标记为额外保留。

我想在脚本中添加更多功能,例如忽略无用文件类型的功能,但添加代码已经很困难了。

我该如何重新排列它以使其更容易使用?

编辑:这不是原创作品,但我对其进行了修改。这是我能理解的唯一一个可以实现我想要的功能的脚本。但现在我想添加更多内容。

谢谢!

答案1

将整个bash命令移动到脚本中(例如,在/some/path/sync.sh):

#! /bin/bash

for i 
do
    EXT="${i##*.}" 
    EXT=${EXT,,}

    if [[ "${EXT}" == *"/"* ]]
    then 
        EXT="no_extension"; 
    fi

    mkdir -p "${DEST}/${EXT}"
    rsync -a "$i" "${DEST}/${EXT}"
done

然后这样调用find

SRC="/src"
export DEST="/dest"

find "${SRC}" -iname '*' -type f -exec /some/path/sync.sh {} +

现在添加您想要的所有功能。

具体来说,为了忽略无用的文件扩展名,find最好修改命令:

find ... ! -regex '.*\.(some|useless|exts)$' ... -exec

(通过对(和进行一些转义|以及对 进行适当的选择-regextype。)

答案2

您可以通过 shellcheck 检查脚本来检查计算机的可读性。

为此,复制您的实际脚本版本,然后按照以下在线版本的 shellcheck 进行操作,查看可能的备注或错误:

您也可以在离线终端上使用 shellcheck,如果您在本地安装它,请按照以下步骤操作:

shellcheck path_to_your_script/your_script.sh

相关内容