sed -i后批量重命名文件

时间:2012-10-03 18:30:53

标签: bash sed awk find file-rename

此脚本正确查找我需要的文件,并用一个空格替换连续的空格:

find . -type f -iname *-[0-9][0-9][0-9][0-9][0-9]-* ! -iname *.gz ! -iname *_processed -print0 | xargs -0 sed -i  's/ \+ / /g'

我现在需要的是将_parsed附加到每个文件的文件名的末尾,以便下次运行此脚本时忽略这些文件。

这样做的好方法是什么?注意:文件没有扩展名。文件名如下所示:

./1923/338810-99999-1923
./1921/999999-41406-1921
./1953/320590-99999-1953
./1911/241360-99999-1911
./1923/307330-99999-1923
./1983/802220-99999-1983

编辑:我正在使用CentOS 6.基于Python的解决方案也可以。

1 个答案:

答案 0 :(得分:2)

如果您正在寻找一种方法将当前脚本结合使用,那么您可以将find的结果放入while循环并同时执行两个操作(while而不是for以支持带空格的文件,如果您需要此条件 - 感谢@TimPote提示!):

find . -type f -iname *-[0-9][0-9][0-9][0-9][0-9]-* ! -iname *.gz ! -iname *_processed -print | while read file; do \
    sed -i 's/ \+ / /g' "$file"; \
    mv "$file" "${file}_parsed"; \
done

另一种方法,就是重命名,就是使用find的{​​{1}}选项:

-exec

此命令将遍历原始find + replace命令找到的相同文件列表,但这次只会根据需要重命名它们。