0

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

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 的解决方案也可以。

4

1 回答 1

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's-exec选项:

find . -type f -iname *-[0-9][0-9][0-9][0-9][0-9]-* ! -iname *.gz ! -iname *_processed -exec mv {} "{}_parsed" \;

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

于 2012-10-03T18:34:59.797 回答