改进我的 bash 脚本来查找、删除和符号链接目录树

改进我的 bash 脚本来查找、删除和符号链接目录树

我有这个脚本,我已经使用了一段时间,它基本上可以工作,但是有一些问题我希望得到纠正的帮助。

目标是查看外部挂载点,检查是否存在匹配的源目录,如果匹配,则删除源,并创建从外部到源所在的空位置的符号链接。

当然,任何有关完成相同任务的更好方法的建议都将受到欢迎。

第一个也是最重要的问题是一些目录被遗忘。透过它们,我看不到任何特定的模式。许多具有{}或其他特殊字符,我认为这可能是主要原因,但有些非常普通,没有特殊字符。

其次,我的脚本不考虑文件,它需要一个目录。

结构如下:

19823798/Test1 (789) - {456} [123]
8765862/Test2 {123} - (456) [789]
345345/Test2-ünicode (456) - {789} [123]
308/unexpected.file

我的脚本如下所示:

#!/bin/bash
set -e
src_dir="/var/tank"
dest_dir="/mnt/tank"
nums_and_names=$(find "$src_dir" -mindepth 2 -maxdepth 2 -type d -regextype grep -regex ".*/[0-9]\{1,10\}/.*" -printf '%P\n')
while read -r named; do
        echo "dest_dir is "${dest_dir}/$named""
        echo "find output is $named"
        [ -d "${dest_dir}/$named" ] && echo ""${dest_dir}/$named" exists!" || exit 0
        rm -rf -- "${src_dir}/$named"
        ln -s -- "${dest_dir}/$named" "${src_dir}/$named"
done <<< "$nums_and_names"
echo "all finished"

相关内容