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,并对找到的每个文件执行以下操作:
- 保存文件扩展名到
EXT
- 转换
EXT
为小写 - 是否
EXT
包含/
字符?如果是,那么EXT="no_extension"
$EXT
在$DEST
文件夹中新建一个文件夹,命名为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