linux 中移动文件_如何在Linux中移动文件_普通网友的博客-程序员秘密_linux移动文件

技术标签: java  后端  

linux 中移动文件

在Linux中移动文件看似比较简单,但是可用的选项却比大多数人想象的要多。 本文向初学者讲授如何在GUI和命令行中移动文件,同时还解释了幕后实际发生的情况,并介绍了许多经验丰富的用户很少探索的命令行选项。

搬什么?

在研究移动文件之前,值得仔细研究一下_移动_文件系统对象时实际发生的情况。 创建文件后,会将其分配给一个_inode_ ,它是用于数据存储的文件系统中的固定点。 您可以使用ls命令将inode映射到文件:

     $ ls --inode example.txt
     
7344977 example.txt

移动文件时,实际上并没有将数据从一个索引节点移动到另一个索引节点,而只是给文件对象分配了新的名称或文件路径。 实际上,文件在移动时会保留其权限,因为移动文件不会更改或重新创建它。

文件和目录索引节点从不暗示继承,而是由文件系统本身决定的。 Inode分配是基于文件创建时间的顺序分配的,并且完全独立于组织计算机的方式。 目录“内部”的文件的索引节点号可能比其父目录的索引号低,或较高。 例如:

     $ mkdir foo
     
$ mv example.txt foo
     
$ ls --inode
     
7476865 foo
     
$ ls --inode foo
     
7344977 example.txt

但是,将文件从一个硬盘驱动器移动到另一个硬盘驱动器时,索引节点很有可能会发生变化。 发生这种情况是因为必须将新数据写入新文件系统。 因此,在Linux中,移动和重命名文件的操作实际上是相同的操作。 无论您将文件移动到另一个目录还是使用新名称移动到同一目录,这两个操作均由同一基础程序执行。

本文重点介绍将文件从一个目录移动到另一个目录。

用鼠标移动

GUI是大多数人熟悉的友好且熟悉的抽象层,位于二进制数据的复杂集合之上。 这也是在Linux上移动文件的第一种也是最直观的方法。 如果您习惯了一般的桌面体验,那么您可能已经知道如何在硬盘驱动器上移动文件。 例如,在GNOME桌面上,将文件从一个窗口拖放到另一个窗口时的默认操作是移动文件而不是复制文件,因此这可能是桌面上最直观的操作之一:

Moving a file in GNOME.

默认情况下,KDE Plasma桌面中的Dolphin文件管理器提示用户进行操作。 拖动文件时按住Shift键可强制执行移动操作:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FE1FDha-1648354911959)(https://opensource.com/sites/default/files/uploads/kde-mv.jpg “在KDE中移动文件。”)]

在命令行上移动

MV 一个具有可预测语法的简单命令**mv **将源文件移动到指定的目标,每个目标都由绝对相对文件路径定义。 如前所述, mvPOSIX用户的常用命令,其许多附加修饰符通常是未知的,因此,无论您是新手还是有经验的人,本文都会为您带来一些有用的修饰符。

但是,并非所有的mv命令都是由同一个人编写的,因此取决于您的操作系统,您可能拥有GNU mv ,BSD mv或Sun mv 。 命令选项因实现而异(BSD mv根本没有长选项),因此请参考您的mv手册页以查看受支持的内容,或者安装您的首选版本(这是开源的奢侈之处)。

移动文件

要使用mv将文件从一个文件夹移动到另一个文件夹,请记住语法mv 。 例如,要将文件example.txt移到“ **文档”**目录中:

     $ touch example.txt
     
$ mv example.txt ~/Documents
     
$ ls ~/Documents
     
example.txt

就像当您通过将文件拖放到文件夹图标上来移动文件时,此命令不会将example.txt替换为Documents 。 而是, mv检测到Documents是一个文件夹,然后将example.txt文件放入其中。

您还可以方便地在移动文件时重命名该文件:

     $ touch example.txt
     
$ mv example.txt ~/Documents/foo.txt
     
$ ls ~/Documents
     
foo.txt

这很重要,因为即使您不想将文件移动到另一个位置,它也可以使您重命名文件,例如:

$ touch example.txt
$ mv example.txt foo2.txt
$ ls
foo2.txt

移动目录

mv命令不会像cp一样将文件与目录区分开。 您可以使用相同的语法移动目录或文件:

     $ touch file.txt
     
$ mkdir foo_directory
     
$ mv file.txt foo_directory
     
$ mv foo_directory ~/Documents

安全地移动文件

如果将文件复制到已经存在相同名称文件的目录中,则mv命令默认将目标文件替换为您要移动的文件。 这种行为称为“ 破坏” ,有时正是您想要的。 其他时间不是。

某些发行版_别名_ mvmv --interactive (或者您可以编写自己的 别名 ),提示您进行确认。 有些没有。 无论哪种方式,都可以使用**–interactive-i选项来确保在两个相同名称的文件发生冲突的情况下mv**要求确认:

     $ mv --interactive example.txt ~/Documents
     
mv: overwrite '~/Documents/example.txt'? 

如果不想手动干预,请使用**–no-clobber-n代替。 如果发生冲突,此标志将静默拒绝移动动作。 在此示例中, / Documents中已经存在一个名为example.txt的** 文件 ,因此不会按照指示将其从当前目录移走:

     $ 
     mv 
     --no-clobber example.txt ~ 
     / Documents
     
$ 
     ls 
     
example.txt

移动备份

如果您使用的是GNU mv ,那么备份选项提供了另一种安全的移动方式。 要创建任何有冲突的目标文件的备份,请使用**-b**选项:

     $ mv -b example.txt ~/Documents
     
$ ls ~/Documents
     
example.txt ? ?example.txt~

该标志确保mv完成移动动作,但也保护目标位置中的所有先前存在的文件。

另一个GNU备份选项是**–backup** ,它使用一个参数定义备份文件的命名方式:

  • existing :如果目标中已经存在编号的备份,则将创建编号的备份。 否则,将使用简单方案。
  • none :即使设置了**–backup,也不创建备份。 该选项对于覆盖设置备份选项的mv**别名很有用。
  • numbered :在目标文件后面附加一个数字。
  • 简单 :在目标文件后加上 ,可以使用**ls–ignore-backups**选项方便地将其从您的日常视图中隐藏起来。

例如:

     $ mv --backup=numbered example.txt ~/Documents
     
$ ls ~/Documents
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:23 example.txt
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:20 example.txt.~1~

可以使用环境变量VERSION_CONTROL设置默认的备份方案。 您可以在**/ .bashrc**文件中设置环境变量,也可以在命令前动态设置环境变量:

     $ VERSION_CONTROL=numbered mv --backup example.txt ~/Documents
     
$ ls ~/Documents
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:23 example.txt
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:20 example.txt.~1~
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:22 example.txt.~2~

–backup选项仍然遵循**–interactive-i**选项,因此即使它在执行备份之前创建了备份,它仍会提示您覆盖目标文件:

     $ mv --backup=numbered example.txt ~/Documents
     
mv: overwrite '~/Documents/example.txt'? y
     
$ ls ~/Documents
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:24 example.txt
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:20 example.txt.~1~
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:22 example.txt.~2~
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:23 example.txt.~3~

您可以使用**–force-f选项覆盖-i** 。

     $ mv --backup=numbered --force example.txt ~/Documents
     
$ ls ~/Documents
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:26 example.txt
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:20 example.txt.~1~
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:22 example.txt.~2~
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:24 example.txt.~3~
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:25 example.txt.~4~

–backup选项在BSD mv中不可用。

一次移动许多文件

移动多个文件时, mv将最终目录命名为目标:

     $ mv foo bar baz ~/Documents
     
$ ls ~/Documents
     
foo ? bar ? baz

如果最后一项不是目录,则mv返回错误:

     $ mv foo bar baz
     
mv: target 'baz' is not a directory

GNU mv的语法相当灵活。 如果无法为mv命令提供目的地作为最后一个参数,请使用**–target-directory-t**选项:

     $ mv --target-directory=~/Documents foo bar baz
     
$ ls ~/Documents
     
foo ? bar ? baz

当从其他命令(例如find命令, xargsGNU Parallel)的输出构造mv命令时,这特别有用。

基于mtime移动

使用GNU mv ,您可以根据要移动的文件是否比要替换的目标文件新来定义移动动作。 该选项与**–update-u**选项一起可用,在BSD mv中不可用:

     $ ls -l ~/Documents
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:32 example.txt
     
$ ls -l 
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:42 example.txt
     
$ mv --update example.txt ~/Documents
     
$ ls -l ~/Documents
     
-rw-rw-r--. 1 seth users 128 Aug ?1 17:42 example.txt
     
$ ls -l

此结果仅基于文件的修改时间,而不是基于两个文件的差异,因此请谨慎使用。 仅通过触摸命令就可以欺骗mv

     $ 
     cat example.txt
     
one
     
$ 
     cat ~ 
     / Documents 
     / example.txt
     
one
     
two
     
$ 
     touch example.txt
     
$ 
     mv 
     --update example.txt ~ 
     / Documents
     
$ 
     cat ~ 
     / Documents 
     / example.txt
     
one

显然,这不是可用的最智能的更新功能,但是它提供了防止覆盖最新数据的基本保护。

移动

除了mv命令外,还有更多移动数据的方法,但是作为作业的默认程序, mv是一个很好的通用选项。 既然您知道可以使用的选项,则可以比以前更聪明地使用mv

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

linux 中移动文件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Ajekseg/article/details/123771063

智能推荐

计算机组成原理实验要用到CD,计算机组成原理实验补充实验指导-实验1、2.doc_Scott Johnson的博客-程序员秘密

实验一、实验箱介绍与DEBUG简单使用一、实验目的1)了解实验箱的构成2)掌握模型机的结构框图3)学会DEBUG的简单使用二、实验内容1.实验箱介绍图1-1 计算机组成原理实验箱图1-1给出了实验箱的结构图,构成部分均在实验箱的印刷电路板上标注,如:ALU Uint(算逻单元)、Input Device Unit(输入单元)、Switch Unit(控制开关单元)、Bus Unit(总线单元)……...

Koa1 框架_dd1095的博客-程序员秘密

安装创建项目:1.一定要全局安装(koa1.2和koa2都己经支持)npm install koa-generator -g 2.koa1 生成一个test项目,切到test目录并下载依赖koa1创建项目koa testcd test npm install运行:npm start访问:http://localhost:3000Ko...

Excel 权限错误和应用程序8000401A错误解决办法_banbi8820的博客-程序员秘密

Excle环境配置:对 Excel进行编程,实际上就是通过 .Net Framework去调用 Excel的 COM组件,所有要在 Web环境下调用 COM组件的时候,都需要对其进行相应的配置。 很多朋友都反映在 Windows环境下调试正常的程序,一拿到 Web环境中就出错,实际上就是因为缺少了这一步。 下面就详细介绍 DCOM的配置过程。1、运行“dcomcnfg”,打开 D...

七日杀怎么修改服务器世界参数,七日杀怎么修改mod参数 | 手游网游页游攻略大全..._weixin_39774490的博客-程序员秘密

发布时间:2015-11-19修改分辨率的方法 首先要进入注册表. 点开始,然后点运行,运行Regedit,然后查找7 Days To Die 出现了一大推注册表. 然后看最下面有两个,一个是Screenmanager Reso ...标签:发布时间:2017-06-09饥荒MOD内容最近更新了什么内容呢?由国外团队制作的七日杀A15.1饥荒MOD更新了15.1.9.0版本,主要是增加了MOD中N...

moviepy音视频剪辑:视频剪辑基类VideoClip详解_LaoYuanPython的博客-程序员秘密

本文是笔者基于moviepy.video.VideoClip.py的文档字符串以及源代码,结合查阅资料和验证测试,断断续续持续了一个多星期探索的结果。详细介绍了视频剪辑基类VideoClip的构造方法、属性和相关处理方法,其中很多方法如save_frame、write_videofile、write_images_sequence、write_gif可以用于输出视频中的对应数据,而subfx、fl_image、add_mask、on_color、set_opacity等是进行视频变换的重要方法。

滴滴笔试编程_chmodzora的博客-程序员秘密

最大连续子序列import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner= new Scanner(System.in);        String str = scanner.next

随便推点

JavaScript中的坑--全局变量惹得祸_21331的博客-程序员秘密

js中变量的作用域及闭包的概念概述身为一名程序员,因为bug周末加班是必不可少的事情,当解决bug的时候,总有些bug是因为规范导致的,但是这些bug往往不好找,也就是“前人挖坑,后人好踩”。前段时间,出现了一个很莫名其妙的bug就是有个模块页面数据不对。当时找了半天(以为是页面传值的问题),到最后才发现 主页面引用的几个js文件中存在一个相同的全局变量。...

js判断字符串以某字符开头或结尾_super_.的博客-程序员秘密_js字符串以什么结尾

一、substr(start,length)函数1、概述:substr(start,length) :从start开始往后截取length位【下标从0开始,长度从开始下标计算】2、举例var str="我是一只快乐的小青蛙";str.substr(0,2):从下标为0开始往后截取2位【我是】str.substr(4,3):从下标为4开始往后截取3位【快乐的】二、判断字符串...

qt编译报错-未添加头文件_橘长_的博客-程序员秘密_qt不写头文件编译报错

title: qt编译报错-未添加头文件date: 2020-07-12 10:38:13tags: 踩坑记录file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/robot_hmi/*.hpp *.h)

JavaScript客户端与服务器端的五种通信方式_donggandi的博客-程序员秘密_javascript 通信

在Web项目中,要实现客户端与服务端的交互,可通过cookie、隐藏框架、HTTP请求、LiveConnect请求和智能HTTP请求等方式实现,一.cookie cookie是第一个JavaScript可以利用的客户端-服务端之间的交互手段。浏览器向服务器发送请求时,为这个服务器存储的cookie会与其他信息一起发送到服务器。这使得JavaScript可以在客户端设置一个cookie,之后

Araxis Merge对比软件工具_「已注销」的博客-程序员秘密

一款对比软件工具merge.exe,不用安装,直接点击使用,功能强大,尤其喜欢文件夹比较能在中间部分看到文件中有多少不同。用了蛮久感觉很好用,所以分享给大家。-A contrast software tools merge. Exe, need not install, click use directly, powerful functions, especially like folder

推荐文章

热门文章

相关标签