linux中如何移动文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux中如何移动文件相关的知识,希望对你有一定的参考价值。

参考技术A 您好,方法
1、我使用的centos是没有图形界面的,所以直接进入的是终端。如图在终端输入用户名和密码进行登陆。
2、登陆后,先用cd /命令回到根目录,然后使用sudo mkdir myDir命令创建一个文件夹作为等会要移动的目录。
3、接着使用sudo touch test.txt命令创建一个要移动的文件。
我这里是使用复制的方式来移动文件。
4、需要使用到cp命令。如图,我使用命令
sudo cp test.txt /myDir/test.txt 将test.txt复制一份到myDir目录下。
复制完后,进入myDir目录查看,可以看到myDir目录下多了一个test.txt文件。
如果在复制的过程中想顺便修改文件名。可以使用命令。
5、sudo cp test.txt /myDir/test2.txt,这条命令就是将test.txt文件复制到myDir文件夹下,并修改文件名为test2.txt。
6、、复制完后,再次进入myDir目录。查看myDir下文件,可以看到,myDir下多了一个test2.txt文件。

如何使用 C++ 在 Linux 中移动文件

【中文标题】如何使用 C++ 在 Linux 中移动文件【英文标题】:How to move file in Linux using C++ 【发布时间】:2018-01-28 22:44:12 【问题描述】:

如何在 Linux 中使用 C++ 程序将文件从一个位置移动到另一个位置? 我编写了一个程序来执行此操作并且它运行,但是当我尝试将文件移动到不同的目录时它不会移动文件,我从 cout 语句中收到错误消息。当我尝试重命名文件时,将其移动到具有新名称的同一目录中。如何修复我的代码以便能够将文件移动到另一个目录?

这是我写的代码:

#include <iostream>
#include <stdio.h>
using namespace std;

int main ()

  int result=1;
  char oldname[500];
  char newname[500];
  cout << "Enter the name of a file you want to move (include directory structure)";
  cin >> oldname;
  cout << "Enter the new location (include directory structure)";
  cin >> newname;

  result = rename( oldname , newname );
  if ( result == 0 )
    cout << "File successfully moved" << endl;
  else
    cout << "Error moving file" << endl;
  return 0;

编辑: 我在我的代码中添加了 perror 并且显示的错误消息是“移动文件时出错:没有这样的文件或目录”,即使我尝试将其移动到的目录确实存在并且它具有创建和删除文件的权限。

【问题讨论】:

不管你想做什么,首先在终端上用rename命令试试。一旦你能够成功,你就可以尝试用一个程序做同样的事情 看看这些答案:***.com/questions/22201663/find-and-move-files-in-c this 的回答可能会让你更深入一点。 我不敢相信有人会问这个问题:oldname 到底输入了什么? ls -l 对那个字符串说了什么? newname 也一样。 rename 函数创建目录。因此,您最好在移动之前自己创建它们。 【参考方案1】:

您的代码在大多数情况下都可以工作。但是你忽略了一些重要的事情,在这种情况下它会破坏:

权限、不存在的路径等显而易见的事情...... 500 个字符或更多字符的路径。不要为oldnamenewname 使用静态分配的内存

rename() 无法在文件系统之间移动,所以这样做(包括 iostream

ifstream ifs(oldname, ios::in | ios::binary);
ofstream ofs(newname, ios::out | ios::binary);
ofs << ifs.rdbuf();
remove(oldname);

remove() 之前,您的总磁盘空间会少一些。

如果您在文件系统之间移动,这无关紧要,因为只有带有newname 的文件系统上的可用空间会缩小,这是您拥有的可用空间,否则您将无法在此处移动文件 如果 oldnamenewname 位于同一个文件系统上,并且您真的很在意这种临时丢失,那么请检查您是否将使用同一个文件系统并最终使用 rename()

【讨论】:

您建议的复制到其他 fs 未能保留移动应保留的权限。 好点! atime、mtime、ctime、UID 和 GID 也不保留。这可以通过在阅读内容之前在原始文件上使用fstat() 来避免(如果需要)。在写入之前,可以使用内存中的元数据使用mknod,并且只有在文件创建后才开始写入。不过你的代码会变得很长...... in 和 out 标志是多余的。【参考方案2】:

如何修复程序取决于移动(重命名)失败的原因。

使用errno可以找到失败的原因。


在这种情况下,必须确保源文件存在。

对于所有需要考虑以稳健地实现移动的事情,我建议研究mv 命令的实现。

【讨论】:

我得到的 perror 错误是“没有这样的文件或目录”。我尝试将其移动到的目录确实存在,并且我将权限设置为“创建和删除文件”,所以我不明白为什么会收到该错误消息。 @softengstu 你是如何验证目录存在的? 我尝试将它移动到我在主页中看到的 Documents 文件夹中,但是当我刚才运行一个 shell 脚本来仔细检查时,它似乎不存在。我还创建了一个目录,然后尝试将文件移动到我刚刚创建的目录,我得到了相同的错误消息。 如果它看起来不存在,那么这显然是您无法将文件移动到那里的原因。 对不起,我在 shell 脚本中犯了一个错误(最初没有包含完整的目录结构)——它确实存在。

以上是关于linux中如何移动文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 在 Linux 中移动文件

linux如何复制移动文件

linux下如何移动文件到一个不存在的目录

如何在 Linux 中批量移动复制追加和重命名文件

LINUX 移动文件命令

linux 怎样把一个文件夹下的文件移动到另一个文件夹