此脚本正确查找我需要的文件,并用一个空格替换连续的空格:
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的解决方案也可以。
答案 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命令找到的相同文件列表,但这次只会根据需要重命名它们。