我需要移动一些目录并使其返回符号链接。
目录结构如下:
/storage1
/storage1/123/named_directory_1
/storage1/123456/named_directory_2
/storage1/123456789/named_directory_3
我想将命名目录移动到其他地方匹配编号的目录,如下所示:
/storage2
/storage2/123/named_directory_1
/storage2/123456/named_directory_2
/storage2/123456789/named_directory_3
然后将那些命名目录符号链接回去。带编号的目录在每个存储上均作为独立目录保留,但应将命名目录从storage1上的相应编号目录符号链接到storage2上匹配的编号目录。
我制定了一个查找命令,该命令与我想要的find . -type d -mindepth 2 -maxdepth 2 -regextype grep -regex ".*/[0-9]\{1,10\}/.*"
匹配:与所有这些都匹配:
/storage2/123/named_directory_1
/storage2/123456/named_directory_2
/storage2/123456789/named_directory_3
但我不知道如何进行所有操作。像这样的东西,但是您可以看到我不知道如何获取$number
和$numberandname
...但是我一直在尝试使用BASH参数和替代方法,但是我不太正确。
echo "${named#*/}"
named_directory_1
和这个:
echo "${named%/*}"
/storage/123
这是我最好的脚本概述:
while read -r named; do
export numberandname="${named#/*/*/*/}"
export number="${numberandname%/*}"
mv -- "$named" "/storage2/$number/"
ln -s -- "/storage2/$numberandname "$named"
done < <(find /storage1/ -type d -mindepth 2 -maxdepth 2 -regextype grep -regex ".*/[0-9]\{1,10\}/.*")
我在您的代码中添加了一些改进(我认为)。
1)我被用于命令-printf '%P\n'
选项find
,这给了没有storage1
部分的路径。
2)删除了export
命令,因为这里不需要。
#!/bin/bash
src_dir="storage1"
dest_dir="storage2"
nums_and_names=$(find "$src_dir" -type d -mindepth 2 -maxdepth 2 -regextype grep -regex ".*/[0-9]\{1,10\}/.*" -printf '%P\n')
while read -r named; do
echo mv -- "${src_dir}/$named" "${dest_dir}/${named%/*}"
echo ln -s -- "${dest_dir}/$named" "${src_dir}/$named"
done <<< "$nums_and_names"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句