现在我有些麻烦。我找到了解决一个问题的方法。我在树中有一些文件,其名称是stdout-captured,stderr-captured和status-capture,我必须将这些文件重命名为stdout-expected,stderr-expected和status-expected。 谢谢你的帮助。
答案 0 :(得分:2)
根据我们能够辨别的这个问题,您尝试创建一个程序化规则来重命名以扩展程序stdout-captured
,stderr-captured
和status-captured
结尾的文件(假设一个错字)分别以扩展名stdout-expected
,stderr-expected
和status-expected
结尾的文件。显然,如果这些定义中的每一个都只包含一个文件,则死记硬背mv
可能更合适。
要使用sed
执行所需的翻译,只需在/bin/bash
中调用以下内容,并将所需目标作为当前工作目录:
EXTENSION=stdout-captured
REPLACEMENT=stdout-expected
for arg in $(ls *.$EXTENSION); \
do mv $arg $(echo $arg | sed s/\\.$EXTENSION/.$REPLACEMENT/); \
done
...其中为您要检测和替换的每个案例定义了$EXTENSION
和$REPLACEMENT
。假设文件名的其余部分中没有任何文件包含.$EXTENSION
。此解决方案不需要awk
。
要在多个目录之间递归调用此方法,请考虑将ls
替换为find
并相应地更新规则。请注意,find
has its own facilities也可以对找到的资源执行操作。