簡體   English   中英

在UNIX中將文件從一個位置移動到另一個位置

[英]Move a file from a location to another in UNIX

我必須使用一些命令在UNIX中實現外殼

我想將多個文件移動到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");
  }
}

這就是我寫的 在“ for”中,他使用mvFile_name1並將其重命名為mvFile_name2,然后他沒有該文件的先前名稱。 但是,如果這行得通,仍然不要移動mvFile_name1中的文件,他只是將它們重命名為mvFile_name1。

您的args以錯誤的順序rename() ,將它們交換。

他們是:

rename(oldpath, newpath);

另外,您還需要構造新路徑,方法是剝離mvFile_name2中的任何路徑(/之前的部分),然后將其替換為mvFile_name1。

另外,您還應該驗證mvFile_name1是一個目錄。

因此,如果該人輸入:

1
/tmp
/some/place/this.txt

那么您應該這樣做:

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

同樣,如果舊路徑和新路徑位於不同的磁盤上,這將失敗,但是可能比您要處理的更為復雜。

另外,@ iharob所說的一切。

即使您的代碼有效,它也存在一些問題

  1. fflush()函數的行為未針對c標准中的輸入流進行定義,僅針對輸出進行了定義。 因此, fflush(stdin)是未定義的行為。

  2. 您必須檢查scanf()的返回值,否則可能會導致專門針對"%d"說明符的問題。

  3. 這個scanf("%s", &mvFile_name1); 是錯誤的,因為mvFile_name1已經是指向數組第一個元素的指針。 傳遞它的地址是錯誤的,因為結果指針的類型錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM