在当前和子目录中的每个Python文件的顶部添加行

Mar*_*inC 7 python linux shell perl

我在Ubuntu平台上,并且有一个包含许多.py文件和子目录(也包含.py文件)的目录.我想在每个.py文件的顶部添加一行文本.使用Perl,Python或shell脚本最简单的方法是什么?

gle*_*man 6

find . -name \*.py | xargs sed -i '1a Line of text here'
Run Code Online (Sandbox Code Playgroud)

编辑:从tchrist的评论,处理带空格的文件名.

假设你有GNU find和xargs(你在问题上指定了linux标签)

find . -name \*.py -print0 | xargs -0 sed -i '1a Line of text here'
Run Code Online (Sandbox Code Playgroud)

没有GNU工具,你可以这样做:

while IFS= read -r filename; do
  { echo "new line"; cat "$filename"; } > tmpfile && mv tmpfile "$filename"
done < <(find . -name \*.py -print)
Run Code Online (Sandbox Code Playgroud)


Did*_*set 5

for a in `find . -name '*.py'` ; do cp "$a" "$a.cp" ; echo "Added line" > "$a" ; cat "$a.cp" >> "$a" ; rm "$a.cp" ; done
Run Code Online (Sandbox Code Playgroud)

  • 最后你可能想要'rm $ a.cp` (3认同)

Eug*_*ash 4

    #!/usr/bin/perl

    use Tie::File;
    for (@ARGV) {
        tie my @array, 'Tie::File', $_ or die $!; 
        unshift @array, "A new line";        
    }
Run Code Online (Sandbox Code Playgroud)

.py递归处理目录中的所有文件,请在 shell 中运行以下命令:

find . -name '*.py' | xargs perl script.pl