我的主目录中有几个没有一致命名模式的子目录(例如~/123
,~/456
,~/789
)。
在每个子目录中,我有两个名为alignment1
和alignment2
的文件夹。在文件夹alignment1
和alignment2
中有几个文件。
我感兴趣的文件在alignment1
文件夹中名为alignment1
(无扩展名),在alignment2
文件夹中名为alignment2
(无扩展名)。< / p>
请记住,在文件夹alignment1
和alignment2
中,还有其他名为alignment
,但的文件,它们具有扩展名(例如alignment1.backbone
} alignment1.bbcol
和alignment2.backbone
,alignment2.bbcol
分别位于alignment1
和alignment2
文件夹中),但我 对这些文件不感兴趣
~/123/alignment1/alignment1
~/123/alignment2/alignment2
~/456/alignment1/alignment1
~/456/alignment2/alignment2
etc...
问题:
答案 0 :(得分:0)
试图将问题分解成小部分。这段代码应该找到所有出现的。也许你应该在正则表达式中改变一些东西。 \1
会匹配\(
和\)
内已匹配的内容。 mindepth
应找到*/*/*
及以下。 *
在这里非常重要,因为您对结果有/
的数量。
find * -mindepth 2 -type f | grep '/\([a-z]*[0-9]\)/\1' | while read f; do
<process>
done
现在您正在迭代您感兴趣的所有文件。在继续前进之前,循环中的echo "$f"
是一个不错的主意。
如果过滤器正在运行,下面是将文件名分成小部分的一些想法:
d1=`cut -d'/' -f1 <<< "$f"`
d2=`cut -d'/' -f2 <<< "$f"`
newName="${d1}/${d1}_${d2}"
现在只需要一些简单的mv "$from" "$to"
。