Linux 文件更新与备份:关键命令操作指南

前言

在 Linux 系统中,文件和目录管理是日常操作的基础技能。本文将结合工作环境来介绍两个命令的功能和用法。(本文将以 Ubuntu 版本示例)

touch命令使用场景

创建一个空文件

//touch文件名则创建一个新的空文件
root@ubuntu:~# touch a.txt
root@ubuntu:~# stat a.txt 
  File: a.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 252,0	Inode: 2359307     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-08-06 01:54:27.105681274 +0000
Modify: 2024-08-06 01:54:27.105681274 +0000
Change: 2024-08-06 01:54:27.105681274 +0000
 Birth: 2024-08-06 01:54:27.105681274 +0000

更新文件的访问时间和修改时间

//若文件已存在,touch文件名,则更新文件的访问时间和修改时间
root@ubuntu:~# touch a.txt
root@ubuntu:~# stat a.txt 
  File: a.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 252,0	Inode: 2359307     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-08-06 01:55:03.437591194 +0000
Modify: 2024-08-06 01:55:03.437591194 +0000
Change: 2024-08-06 01:55:03.437591194 +0000
 Birth: 2024-08-06 01:54:27.105681274 +0000

更新链接文件的访问时间和修改时间

// 当使用-h选项时,touch链接文件时,不会更新源文件
root@ubuntu:~# stat a.txt
  File: a.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 252,0	Inode: 2359306     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-08-06 02:19:22.310551437 +0000
Modify: 2024-08-06 02:19:22.310551437 +0000
Change: 2024-08-06 02:19:22.310551437 +0000
 Birth: 2024-08-06 02:18:43.357426739 +0000
root@ubuntu:~# touch -h a.txt.link 
root@ubuntu:~# stat a.txt
  File: a.txt
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
Device: 252,0	Inode: 2359306     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-08-06 02:19:22.310551437 +0000
Modify: 2024-08-06 02:19:22.310551437 +0000
Change: 2024-08-06 02:19:22.310551437 +0000
 Birth: 2024-08-06 02:18:43.357426739 +0000
root@ubuntu:~# stat a.txt.link 
  File: a.txt.link -> a.txt
  Size: 5         	Blocks: 0          IO Block: 4096   symbolic link
Device: 252,0	Inode: 2359307     Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-08-06 02:23:10.436333177 +0000
Modify: 2024-08-06 02:22:55.957894373 +0000
Change: 2024-08-06 02:22:55.957894373 +0000
 Birth: 2024-08-06 02:18:57.815842867 +0000

参考文件的时间刷新到目标文件

// 将-r选项后的文件时间刷新到选项前的文件中
root@ubuntu:~# ll *.txt
-rw-r--r-- 1 root root 0 Aug  6 02:19 a.txt
-rw-r--r-- 1 root root 0 Aug  6 02:25 b.txt
root@ubuntu:~# touch a.txt -r b.txt 
root@ubuntu:~# ll *.txt
-rw-r--r-- 1 root root 0 Aug  6 02:25 a.txt
-rw-r--r-- 1 root root 0 Aug  6 02:25 b.txt

不创建新文件

// 若文件存在,则更新时间,若文件不存在,也不创建新文件
root@ubuntu:~# ll a.txt
-rw-r--r-- 1 root root 0 Aug  6 02:25 a.txt
root@ubuntu:~# touch -c a.txt
root@ubuntu:~# ll a.txt
-rw-r--r-- 1 root root 0 Aug  6 02:33 a.txt
root@ubuntu:~# touch -c c.txt
root@ubuntu:~# ls
a.txt  a.txt.link  b.txt

cp命令使用场景

复制文件过程中会覆盖目标文件内容,一般在工作环境中需要先备份(-b选项)再覆盖,或者使用 -i 选项,以免操作错误,丢失数据文件。

文件之间的复制

// 复制文件到当前目录下,也可使用绝对路径复制到其他目录下
root@ubuntu:~# touch a.txt
root@ubuntu:~# ls
a.txt
root@ubuntu:~# cp a.txt abc.txt
root@ubuntu:~# ls
abc.txt  a.txt

-i 复制前询问是否文件内容覆盖

// 若需要则输入y按下回车,若不需要覆盖则输入n按下回车
root@ubuntu:~# echo "dayunzi" >a.txt 
root@ubuntu:~# cp -i a.txt abc.txt 
cp: overwrite 'abc.txt'? y
root@ubuntu:~# cat abc.txt 
dayunzi

-u 复制时比较更新时间

// 当源文件更新时间更新时,复制操作不生效
root@ubuntu:~# echo "aaaaaa" >a.txt
root@ubuntu:~# echo "abcabc" >abc.txt
root@ubuntu:~# ll *.txt
-rw-r--r-- 1 root root 7 Aug  6 03:02 abc.txt
-rw-r--r-- 1 root root 7 Aug  6 03:01 a.txt
root@ubuntu:~# cp -u a.txt abc.txt
root@ubuntu:~# cat abc.txt
abcabc
root@ubuntu:~# cp -u abc.txt a.txt
root@ubuntu:~# cat a.txt 
abcabc

-b 复制前备份

// 若再一次覆盖同一个文件,备份文件同样会被覆盖为最近一次需要备份的内容
root@ubuntu:~# cp -b a.txt abc.txt
root@ubuntu:~# ls
abc.txt  abc.txt~  a.txt
root@ubuntu:~# cat abc.txt
aaaaaa
root@ubuntu:~# cat abc.txt~
abcabc
root@ubuntu:~# touch c.txt
root@ubuntu:~# echo "cccccc" >c.txt
root@ubuntu:~# cp -b c.txt abc.txt
root@ubuntu:~# cat abc.txt~
aaaaaa

复制文件到目录

root@ubuntu:~# mkdir dira
root@ubuntu:~# cp a.txt dira
root@ubuntu:~# ls dira
a.txt

-r 递归复制

// 用于复制整个目录及目录下的内容
root@ubuntu:~# mkdir dirb
root@ubuntu:~# cp -r dira dirb
root@ubuntu:~# ls dirb
dira

-a 特殊文件的复制

// 当复制一些特殊文件时,需要使用-a选项保留文件属性,即可正常复制
root@ubuntu:~# cp -a /dev/zero ./zero
root@ubuntu:~# ll zero
crw-rw-rw- 1 root root 1, 5 Aug  6 01:07 zero

mv命令的使用场景

-b 移动文件并备份

// 移动文件内容覆盖到目标文件,并删除源文件,切记使用-b选项进行备份
root@ubuntu:~# echo "aaa" >a.txt
root@ubuntu:~# echo "bbb">b.txt
root@ubuntu:~# mv -b a.txt b.txt
root@ubuntu:~# cat b.txt
aaa

-n 跳过移动文件

// 如果目标文件已存在,则不进行移动文件,输出结果提示”不替换b.txt"
root@ubuntu:~# touch a.txt
root@ubuntu:~# mv -n a.txt b.txt
mv: not replacing 'b.txt' 

-i 询问是否移动覆盖目标文件

// 若目标文件已存在,则询问是否进行覆盖,是则输入y,否则输入n
root@ubuntu:~# mv -i a.txt b.txt
mv: overwrite 'b.txt'? y

-u 移动前比较更新时间

// 当源文件比目标文件新时,才能进行移动操作
root@ubuntu:~# echo "aaaa" >a.txt
root@ubuntu:~# ll *.txt
-rw-r--r-- 1 root root 5 Aug  6 06:24 a.txt
-rw-r--r-- 1 root root 0 Aug  6 06:16 b.txt
root@ubuntu:~# mv -u b.txt a.txt
root@ubuntu:~# cat b.txt
root@ubuntu:~# mv -u a.txt b.txt
root@ubuntu:~# ll *.txt
-rw-r--r-- 1 root root 5 Aug  6 06:24 b.txt

-v 显示移动过程

root@ubuntu:~# touch a.txt b.txt
root@ubuntu:~# mv -v a.txt b.txt
renamed 'a.txt' -> 'b.txt'

rename命令使用场景

安装rename

root@ubuntu:~# sudo apt install rename

批量更改拓展名

root@ubuntu:~# touch a.txt b.txt c.txt
root@ubuntu:~# rename 's/\.txt$/.md/' *.txt
root@ubuntu:~# ls
a.md  b.md  c.md

批量更改文件名前缀

// An highlighted block
root@ubuntu:~# touch new1.txt new2.txt new3.txt
root@ubuntu:~# rename 's/^new/old/' new*
root@ubuntu:~# ls
old1.txt  old2.txt  old3.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值