在UNIX中将文件从一个位置移动到另一个位置

时间:2016-01-11 13:58:16

标签: c linux shell unix

我必须使用一些命令在unix中实现一个shell

我想将多个文件移动到像mv -t那样的文件夹位置。

问题是重命名功能,只是重命名文件不要移动该文件。

void mv_t()
{
  int mutat;
  char mvFile_name1[256];
  char mvFile_name2[256];
  int nr=0;

  printf("How many files you want to move: ");
  fflush(stdin);
  scanf("%d", &nr);

  printf("The file where you move: ");
  fflush(stdin);
  scanf("%s", &mvFile_name1);

  for(i=0; i<nr; i++)
  {
    printf("The file you want to move: ");
    fflush(stdin);
    scanf("%s", &mvFile_name2);

    mutat = rename(mvFile_name1, mvFile_name2);
    if(mutat != 0)
      perror("Error");
  }
}

这就是我写的。 在&#34; for&#34;他取mvFile_name1并将其重命名为mvFile_name2,然后他没有该文件的先前名称。但如果这样做仍然无法移动mvFile_name1中的文件,他只需将它们重命名为mvFile_name1。

2 个答案:

答案 0 :(得分:3)

你的args以rename()的顺序错误,交换它们。

他们是:

rename(oldpath, newpath);

您还需要通过去除任何路径来构造newpath 在mvFile_name2中的(/之前的部分)并用它替换它 mvFile_name1。

此外,您应该验证mvFile_name1是否为目录。

如果此人进入:

1
/tmp
/some/place/this.txt

然后你应该这样做:

rename(/some/place/this.txt, /tmp/this.txt);

此外,如果旧路径和新路径位于不同的磁盘上,则会失败,但这可能比您想要处理的更复杂。

此外,@ iharob说的一切。

答案 1 :(得分:2)

即使您的代码有效,也存在一些问题

  1. {c>标准中没有为输入流定义fflush()函数的行为,仅用于输出。因此,fflush(stdin)是未定义的行为。

  2. 您必须检查scanf()的返回值,否则可能会导致"%d"说明符出现问题。

  3. 这个scanf("%s", &mvFile_name1);是错误的,因为mvFile_name1已经是指向数组第一个元素的指针。传递它的地址是错误的,因为结果指针的类型错误。