首页 > 编程知识 正文

在手机上移动文件慢,linux移动文件命令mv

时间:2023-05-03 12:44:30 阅读:184842 作者:874

linux mv移动文件夹

不起眼的mv命令是您在遇到的每个POSIX框上找到的有用工具之一。 明确定义了它的工作,并且做得很好:将文件从文件系统中的一个位置移动到另一个位置。 但是Linux即使没有灵活性也不算什么,还有其他文件移动选项。 使用不同的工具可能会带来一些小的优势,这些优势非常适合特定的用例。

在远离mv之前,请查看此命令的默认结果。 首先,创建目录并生成一些权限设置为777的文件:

$ mkdir example
$ touch example / { foo,bar,baz }
$ for i in example /* ; do ls / 淡定的项链 > " ${i} " ; done
$ chmod 777 example /*

你可能不觉得这样理解,但文件中存在的项目,叫做索引节点(俗称的inode),在一个文件系统 。 您可以使用ls命令及其--inode选项查看文件占用的索引节点

$ ls --inode example / foo
7476868 example / foo

作为测试,将文件从示例目录移动到当前目录,然后查看文件的属性:

$ mv example/foo .
$ ls -l -G -g --inode
7476868 -rwxrwxrwx. 1 29545 Aug  2 07:28 foo

如您所见,原始文件及其现有权限已被“移动”,但其inode并未更改。

mv工具已编程为移动文件:保留inode不变(除非将文件移动到其他文件系统),并保留其所有权和权限。

其他工具提供不同的选项。

复制并删除

在某些系统上,移动动作是真正的移动动作:从文件系统中的一个点删除位,然后将其重新分配给另一点。 这种行为在很大程度上已失宠。 现在,移动动作要么是属性重新分配(索引节点现在指向文件组织中的其他位置),要么是复制动作与删除动作的组合。
这种设计的哲学目的是确保在移动失败的情况下,不要将文件分成碎片。

mv不同, cp命令在文件系统中创建一个全新的数据对象。 它具有新的inode位置,并且受您的活动umask约束。 您可以使用cprm (如果有的话,则使用垃圾桶 )命令来模拟移动:

$ cp example / foo .
$ ls -l -G -g --inode
7476869 -rwxrwxr-x. 29545 Aug   2 11 : 58 foo
$ trash example / foo

此示例中的新foo文件获得775权限,因为该位置的umask专门排除了写入权限:

$ umask
0002

有关umask的更多信息,请阅读留胡子的衬衫 Juarez关于文件权限的文章。

猫和删除

与复制和删除类似,在创建“已移动”文件时,使用cat (或tac )命令分配不同的权限。 假设在当前目录中没有foo的全新测试环境:

$ cat example/foo > foo
$ ls -l -G -g --inode
7476869 -rw-rw-r--. 29545 Aug 8 12:21 foo
$ trash example/foo

这次,创建了一个新文件,没有设置任何事先权限。 结果完全取决于umask设置,该设置不会阻止用户和组的权限位(无论umask为何,都不会授予新文件可执行位),但会阻止其他用户的写位(值为2)。 结果是具有664权限的文件。

同步

rsync命令是一个强大的多功能工具,可以在主机和文件系统位置之间发送文件。 该命令有许多可用的选项,包括使其目的地成为其源镜像的功能。

您可以使用--remove-source-files选项以及选择执行同步的其他任何选项(通用的通用选项是--archive )使用rsync复制然后删除文件:

$ rsync --archive --remove-source-files example / foo .
$ ls example
bar  baz
$ ls -lGgi
7476870 -rwxrwxrwx. 1 seth users 29545 Aug 8 12 : 23 foo

在这里,您可以看到保留了文件许可权和所有权,更新了时间戳记并删除了源文件。

提示:不要将此选项与--delete混淆,该选项将从目标目录中删除文件。 误用--delete可以清除大部分数据,建议您在测试环境中避免使用此选项。

您可以覆盖其中一些默认值,更改权限和修改设置:

$ rsync --chmod = 666 --times
--remove-source-files example / foo .
$ ls example
bar  baz
$ ls -lGgi
7476871 -rw-rw-r--. 1 seth users 29545 Aug 8 12 : 55 foo

在此,将尊重目标的umask,因此--chmod = 666选项将生成具有664权限的文件。

但是,好处不只是权限。 rsync命令具有许多有用的选项 (其中不少是--exclude标志,因此您可以从大型移动操作中排除项目),使其比简单的mv命令更强大。 例如,在移动文件集合时排除所有备份文件:

$ rsync --chmod = 666 --times
--exclude '*~'
--remove-source-files example / foo . 通过安装设置权限

install命令是专门针对开发人员的复制命令,通常在软件编译的安装例程中被调用。 它在用户中并不为人所知(而且我经常想知道为什么它有这么直观的名称,而对于包管理器却只留下缩写词和宠物名),但是安装实际上是将文件放在所需位置的有用方法。

install命令有许多选项,包括--backup--compare命令(以避免“更新”文件的较新副本)。

cpcat不同,但与mv完全一样, install命令可以在保留时间戳的同时复制文件:

$ install --preserve-timestamp example/foo .
$ ls -l -G -g --inode
7476869 -rwxr-xr-x. 1 29545 Aug  2 07:28 foo
$ trash example/foo

此处,文件已复制到新的inode,但其mtime不变。 权限,但是,被设定为755安装默认。

您可以使用install来设置文件的权限,所有者和组:

$ install --preserve-timestamp
--owner=skenlon
--group=dialout
--mode=666 example/foo .
$ ls -li
7476869 -rw-rw-rw-. 1 skenlon dialout 29545 Aug  2 07:28 foo
$ trash example/foo 移动,复制和删除

文件包含数据,而真正重要的文件包含您的数据。 学习明智地管理它们非常重要,现在您有了工具包,可以确保以所需的方式正确处理数据。

您是否有其他方法来管理数据? 在评论中告诉我们您的想法。

翻译自: https://opensource.com/article/19/8/moving-files-linux-without-mv

linux mv移动文件夹

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。