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桌面上,将文件从一个窗口拖放到另一个窗口时的默认操作是移动文件而不是复制文件,因此这可能是桌面上最直观的操作之一:
默认情况下,KDE Plasma桌面中的Dolphin文件管理器提示用户进行操作。 拖动文件时按住Shift键可强制执行移动操作:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FE1FDha-1648354911959)(https://opensource.com/sites/default/files/uploads/kde-mv.jpg “在KDE中移动文件。”)]
MV 一个具有可预测语法的简单命令**mv **将源文件移动到指定的目标,每个目标都由绝对或相对文件路径定义。 如前所述, mv是POSIX用户的常用命令,其许多附加修饰符通常是未知的,因此,无论您是新手还是有经验的人,本文都会为您带来一些有用的修饰符。
但是,并非所有的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命令默认将目标文件替换为您要移动的文件。 这种行为称为“ 破坏” ,有时正是您想要的。 其他时间不是。
某些发行版_别名_ mv到mv --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** ,它使用一个参数定义备份文件的命名方式:
例如:
$ 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命令, xargs或GNU Parallel)的输出构造mv命令时,这特别有用。
使用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 中移动文件
件
实验一、实验箱介绍与DEBUG简单使用一、实验目的1)了解实验箱的构成2)掌握模型机的结构框图3)学会DEBUG的简单使用二、实验内容1.实验箱介绍图1-1 计算机组成原理实验箱图1-1给出了实验箱的结构图,构成部分均在实验箱的印刷电路板上标注,如:ALU Uint(算逻单元)、Input Device Unit(输入单元)、Switch Unit(控制开关单元)、Bus Unit(总线单元)……...
安装创建项目:1.一定要全局安装(koa1.2和koa2都己经支持)npm install koa-generator -g 2.koa1 生成一个test项目,切到test目录并下载依赖koa1创建项目koa testcd test npm install运行:npm start访问:http://localhost:3000Ko...
Excle环境配置:对 Excel进行编程,实际上就是通过 .Net Framework去调用 Excel的 COM组件,所有要在 Web环境下调用 COM组件的时候,都需要对其进行相应的配置。 很多朋友都反映在 Windows环境下调试正常的程序,一拿到 Web环境中就出错,实际上就是因为缺少了这一步。 下面就详细介绍 DCOM的配置过程。1、运行“dcomcnfg”,打开 D...
发布时间:2015-11-19修改分辨率的方法 首先要进入注册表. 点开始,然后点运行,运行Regedit,然后查找7 Days To Die 出现了一大推注册表. 然后看最下面有两个,一个是Screenmanager Reso ...标签:发布时间:2017-06-09饥荒MOD内容最近更新了什么内容呢?由国外团队制作的七日杀A15.1饥荒MOD更新了15.1.9.0版本,主要是增加了MOD中N...
本文是笔者基于moviepy.video.VideoClip.py的文档字符串以及源代码,结合查阅资料和验证测试,断断续续持续了一个多星期探索的结果。详细介绍了视频剪辑基类VideoClip的构造方法、属性和相关处理方法,其中很多方法如save_frame、write_videofile、write_images_sequence、write_gif可以用于输出视频中的对应数据,而subfx、fl_image、add_mask、on_color、set_opacity等是进行视频变换的重要方法。
最大连续子序列import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner= new Scanner(System.in); String str = scanner.next
js中变量的作用域及闭包的概念概述身为一名程序员,因为bug周末加班是必不可少的事情,当解决bug的时候,总有些bug是因为规范导致的,但是这些bug往往不好找,也就是“前人挖坑,后人好踩”。前段时间,出现了一个很莫名其妙的bug就是有个模块页面数据不对。当时找了半天(以为是页面传值的问题),到最后才发现 主页面引用的几个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位【快乐的】二、判断字符串...
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)
在Web项目中,要实现客户端与服务端的交互,可通过cookie、隐藏框架、HTTP请求、LiveConnect请求和智能HTTP请求等方式实现,一.cookie cookie是第一个JavaScript可以利用的客户端-服务端之间的交互手段。浏览器向服务器发送请求时,为这个服务器存储的cookie会与其他信息一起发送到服务器。这使得JavaScript可以在客户端设置一个cookie,之后
一款对比软件工具merge.exe,不用安装,直接点击使用,功能强大,尤其喜欢文件夹比较能在中间部分看到文件中有多少不同。用了蛮久感觉很好用,所以分享给大家。-A contrast software tools merge. Exe, need not install, click use directly, powerful functions, especially like folder