无法创建多个文件夹副本并在特定行上,在每个复制文件夹中的唯一文件上更改特定值

时间:2016-08-14 16:12:58

标签: python terminal

我正在尝试创建单个文件夹的多个副本。那么我想要做的是在特定文件中的所有文件夹中更改特定行中的某些单词,即:。

  1. copy folderX - > folder1,folder2,...,folderN(N可以说是200)
  2. 查找文件(该文件具有特定扩展名,例如.jpgs'文件夹中的.txt文件)
  3. 更改单词,例如:sot 1 1 1 - > sot 2 2 2(每个文件将有一个不同的新值(一个将是2 2 2,另一个是3 3 3等)。)
  4. 到目前为止我尝试过的,首先要制作文件夹的副本:

    1. for i in {0...200}; do cp -r test/ test_$i; done(没有用)
    2. for i in (i=0; i<=200; i++); do cp -r test/ test_$i; done(工作但不按预期,有时会引发错误)
    3. 所以我在Python中找到了一个解决方法,

      for i in range(3):
          os.system('cp -r orig_test test-%s' % (i))
      

      这就像一个魅力。但是当我尝试更改文件中的单词时,它只显示该行的内容。

      "grep -r "sot = 1" 1RWT_HpH-* | xargs sed -i "s/1/2/g"
      

      正如我告诉你的那样,行的格式为1 1 1,并且每次迭代时需要将值从1 1 1更改为不同的值。这些值将从列表中提供。

      如果它有助于我使用Mac OS,也许这就是为什么一些应该在Linux上工作的功能不会给出完全相同的结果。

      P.S。如果可能的话,我宁愿选择一种教育性的答案而不是超级高效的只用一行代码来完成这一切。

      非常感谢你提前。干杯!!!

1 个答案:

答案 0 :(得分:0)

对于第一部分:要计入shell,你需要做更多的工作。假设您正在使用bash,您可以执行以下操作(这与您尝试的非常类似,但您需要双括号):

 for ((n=0; n<=100; n++))
 do
     cp -r test test_$n
 done

请注意,shell对于放置空格和换行符的位置非常挑剔。我意识到man bash是一个很长的阅读,但如果你需要做更多的事情,这是值得的。 如果您想进行试验,最好使用echo代替cp命令,这样您就可以在不弄乱文件的情况下尝试:

 for ((n=0; n<=100; n++))
 do
     echo $n
 done

关于第二个问题:grep将返回文件中的行,而不仅仅是文件名。为此,您需要-l标志(即 ell ,而不是一个)。所以,你可以尝试:

grep -lr "sot = 1" 1RWT_HpH-* | xargs sed -i "s/1/2/g"