导航:首页 > 文件类型 > linux正则重命名文件

linux正则重命名文件

发布时间:2024-08-22 10:20:47

linux 正则表达式(1)

在Linux环境下,正则表达式主要应用于grep/egrep、sed和awk等工具,这些命令以其行处理特性为特点,针对每一行数据进行操作。基本的正则表达式包括元字符的使用,它们在文本搜索和替换中发挥关键作用。


1. 例如,如果你想查找以特定字符开始的文本,可以运用相应的正则模式。同样,查找以特定字符结束的文本也有对应的正则表达式。


2. 对于空行和空格的处理,正则表达式也有解决方案,可以轻松筛选出这些内容。


3. 更具体地,如需查找"/etc/"目录(但不包括其子目录)下的所有文件,正则表达式能帮到你,通过精准匹配规则实现目标。


中括号[]在正则表达式中具有特殊功能,可以实现多种模式匹配。比如:


Ⅱ Linux必须学会的60个命令:文件处理1

Linux系统信息存放在文件里,文件与普通的公务文件类似。每个文件都有自己的裤悔名字、内容、存放地址及其它一些管理信息,如文件的用户、文戚纯姿件的大小等。文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据,甚至可以包括可执行的程序和其它非正文内容。Linux文件系统具有良好的结构,系统提供了很多文件处理程序。这里主要介绍常用的文件处理命令。

file 1.作用file通过探测文件内容判断文件类型,使用权限是所有用户。

2.格式file [options]文件名3.[options]主要参数-v:在标准输出后显示版本信息,并且退出。

-z:探测压缩过的文件类型。

-L:允许符合连接。

-f name:从文件namefile中读取要分析的文件名列表。

4.简单说明使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件,还是Shell Script文件,或者是其它的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。

5.应用实例如果我们看到一个没有后缀的文件grap,可以使用下面命令:

$ file grap grap:English text 此时系统显示这是一个英文文本文件。需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型。

mkdir 1.作用mkdir命令的作用是建立名称为dirname的子目录,与MS DOS下的md命令类似,它的使用权限是所有用户。

2.格式mkdir [options]目录名3.[options]主要参数-m,--mode=模式:设定权限<模式>,与chmod类似。

-p,--parents:需要时创建上层目录;如果目录早已存在,则不当作错误。

-v,--verbose:每次创建新目录都显示信息。

--version:显示版本信息后离开。

4.应用实例在进行目录创建时可以设置目录的权限,此时使用的参数是“-m”。假设要创建的目录名是“tsk”,让所有用户都有rwx(即读、写、执行的权限),那么可以使用以下命令:

$ mkdir-m 777 tsk grep 1.作用grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

2.格式grep [options] 3.主要参数[options]主要参数:

-c:只输出匹配行的计数。

-I:不区分大小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及行号。

-s:不显示不存在或无高绝匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

pattern正则表达式主要参数:

:忽略正则表达式中特殊字符的原有含义。

^:匹配正则表达式的开始行。

$:匹配正则表达式的结束行。

<:从匹配正则表达式的行开始。

>:到匹配正则表达式的行结束。

[ ]:单个字符,如[A]即A符合要求。

[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求。

。:所有的单个字符。

*:有字符,长度可以为0。

正则表达式是Linux/Unix系统中非常重要的概念。正则表达式(也称为“regex”或“regexp”)是一个可以描述一类字符串的模式(Pattern)。如果一个字符串可以用某个正则表达式来描述,我们就说这个字符和该正则表达式匹配(Match)。这和DOS中用户可以使用通配符“*”代表任意字符类似。在Linux系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替换”操作和其它功能。4.应用实例查询DNS服务是日常工作之一,这意味着要维护覆盖不同网络的大量IP地址。有时IP地址会超过2000个。如果要查看nnn.nnn网络地址,但是却忘了第二部分中的其余部分,只知到有两个句点,例如nnn nn..。要抽取其中所有nnn.nnn IP地址,使用[0-9 ]{3 }.[0-0{3}。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。

$grep '[0-9 ]{3 }.[0-0{3}' ipfile 补充说明,grep家族还包括fgrep和egrep。fgrep是fix grep,允许查找字符串而不是一个模式;egrep是扩展grep,支持基本及扩展的正则表达式,但不支持q模式范围的应用及与之相对应的一些更加规范的模式。

dd 1.作用dd命令用来复制文件,并根据参数将数据转换和格式化。

2.格式dd [options] 3.[opitions]主要参数bs=字节:强迫ibs=<字节>及obs=<字节>。

cbs=字节:每次转换指定的<字节>。

conv=关键字:根据以逗号分隔的关键字表示的方式来转换文件。

count=块数目:只复制指定<块数目>的输入数据。

ibs=字节:每次读取指定的<字节>。

if=文件:读取<文件>内容,而非标准输入的数据。

obs=字节:每次写入指定的<字节>。

of=文件:将数据写入<文件>,而不在标准输出显示。

seek=块数目:先略过以obs为单位的指定<块数目>的输出数据。

skip=块数目:先略过以ibs为单位的指定<块数目>的输入数据。

4.应用实例

dd命令常常用来制作Linux启动盘。先找一个可引导内核,令它的根设备指向正确的根分区,然后使用dd命令将其写入软盘:

$ rdev vmlinuz /dev/hda $dd if=vmlinuz of=/dev/fd0

上面代码说明,使用rdev命令将可引导内核vmlinuz中的根设备指向/dev/hda,请把“hda”换成自己的根分区,接下来用dd命令将该内核写入软盘。

find 1.作用find命令的作用是在目录中搜索文件,它的使用权限是所有用户。

2.格式find [path][options][expression] path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。

3.主要参数[options]参数:

-depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。

-maxdepth levels:表示至多查找到开始目录的第level层子目录。level是一个非负数,如果level是0的话表示仅在当前目录中查找。

-mindepth levels:表示至少查找到开始目录的第level层子目录。

-mount:不在其它文件系统(如Msdos、Vfat等)的目录和文件中查找。

-version:打印版本。

[expression]是匹配表达式,是find命令接受的表达式,find命令的所有操作都是针对表达式的。它的参数非常多,这里只介绍一些常用的参数。

—name:支持统配符*和?。

-atime n:搜索在过去n天读取过的文件。

-ctime n:搜索在过去n天修改过的文件。

-group grpoupname:搜索所有组为grpoupname的文件。

-user用户名:搜索所有文件属主为用户名(ID或名称)的文件。

-size n:搜索文件大小是n个block的文件。

-print:输出搜索结果,并且打印。

4.应用技巧find命令查找文件的几种方法:

(1)根据文件名查找例如,我们想要查找一个文件名是lilo.conf的文件,可以使用如下命令:

find /-name lilo.conf find命令后的“/”表示搜索整个硬盘。

(2)快速查找文件根据文件名查找文件会遇到一个实际问题,就是要花费相当长的一段时间,特别是大型Linux文件系统和大容量硬盘文件放在很深的子目录中时。如果我们知道了这个文件存放在某个目录中,那么只要在这个目录中往下寻找就能节省很多时间。比如smb.conf文件,从它的文件后缀“.conf”可以判断这是一个配置文件,那么它应该在/etc目录内,此时可以使用下面命令:

find /etc-name smb.conf 这样,使用“快速查找文件”方式可以缩短时间。

(3)根据部分文件名查找方法有时我们知道只某个文件包含有abvd这4个字,那么要查找系统中所有包含有这4个字符的文件可以输入下面命令:

find /-name '*abvd*'

输入这个命令以后,Linux系统会将在/目录中查找所有的包含有abvd这4个字符的文件(其中*是通配符),比如abvdrmyz等符合条件的文件都能显示出来。

(4)使用混合查找方式查找文件

find命令可以使用混合查找的方法,例如,我们想在/etc目录中查找大于500000字节,并且在24小时内修改的某个文件,则可以使用-and (与)把两个查找参数链接起来组合成一个混合的查找方式。

find /etc -size +500000c -and -mtime +1

mv 1.作用mv命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中,它的使用权限是所有用户。该命令如同DOS命令中的ren和move的组合。

2.格式mv[options]源文件或目录目标文件或目录3.[options]主要参数-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件。

-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。

4.应用实例(1)将/usr/cbu中的所有文件移到当前目录(用“.”表示)中:

$ mv /usr/cbu/ * . (2)将文件cjh.txt重命名为wjz.txt:

$ mv cjh.txt wjz.txtls 1.作用ls命令用于显示目录内容,类似DOS下的dir命令,它的使用权限是所有用户。

2.格式ls [options][filename] 3.options主要参数-a,--all:不隐藏任何以“.”字符开始的项目。

-A,--almost-all:列出除了“.”及“..”以外的任何项目。

-b,--escape:以八进制溢出序列表示不可打印的字符。

--block-size=大小:块以指定<大小>的字节为单位。-B,--ignore-backups:不列出任何以~字符结束的项目。

-f:不进行排序,-aU参数生效,-lst参数失效。

-F,--classify:加上文件类型的指示符号(*/=@|其中一个)。

-g:like-l, but do not list owner。

-G,--no-group:inhibit display of group information。

-i,--inode:列出每个文件的inode号。

-I,--ignore=样式:不印出任何符合Shell万用字符<样式>的项目。

-k:即--block-size=1K。

-l:使用较长格式列出信息。

-L,--dereference:当显示符号链接的文件信息时,显示符号链接所指示的对象,而并非符号链接本身的信息。

-m:所有项目以逗号分隔,并填满整行行宽。

-n,--numeric-uid-gid:类似-l,但列出UID及GID号。

-N,--literal:列出未经处理的项目名称,例如不特别处理控制字符。

-p,--file-type:加上文件类型的指示符号(/=@|其中一个)。

-Q,--quote-name:将项目名称括上双引号。

-r,--reverse:依相反次序排列。

-R,--recursive:同时列出所有子目录层。

-s,--size:以块大小为序。

diff 1.作用diff命令用于两个文件之间的比较,并指出两者的不同,它的使用权限是所有用户。

Ⅲ Linux基本操作10-----正则表达式与文件格式化处理


正则表达式
1
简单的说正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以让用户轻易的达到查找,删除,替换某特定字符串的处理程序
2
grep在数据中查找一个字符串时,是以整行为单位来进行数据的选取的,也就是说假如一个文件内有10行,那么其中两行是有用的,那么就将这两行显示出来,其它的丢弃
3
在bash当中,我们知道通配符*可以用来表示任意个字符,但是正则表达式中的*表示不同的含义
在正则表达式中,'.'表示的是一定有一个任意字符的意思
在正则表达式中,'*'表示的是重复前一个字符0到无穷多次的意思
4
基础的正则表达式
RE字符
意义
^word
查找行首为word的行
word$
查找结尾为word的行
.
代表一定有一个任意的字符
*
重复前一个字符0个到无穷多个
[list]
从字符集合里面选择一个字符
[n1-n2]
从要选择的范围里面选择一个字符
[^list]
从不是这个字符集合里面找出一个字符
/{n,m/}
连续n到m个的前一个字符,/{n/}则是连续n个前一个字符,/{n,/}则是联系n到无穷多个前一个字符

sed
工具
1
sed本省是一个管道命令,可以分析标转输入,而且sed还可以将数据进行替换,删除,新增,选取特定行等功能
2
sed的用法
sed
[-nefr]
[动作]
-n
使用安静模式,在一般模式中,所有来自stdin的数据一般都会被列出到屏幕上,但是如果加上-n这个参数的话,则只有经过sed特殊处理的那一行才会被列出
-e
直接在命令模式上进行sed的动作编辑
-f
直接将sed的动作写在一个文件内,-f
filename则可以执行filename内的sed动作
-r
sed的动作支持的是扩展正则表达式的语法
-i
直接修改文件的内容,而不是由屏幕输出
3
动作说明
n1,n2
function
n1,n2不见得会存在,一般代表的是进行的动作的行数
function有下面这些参数
a:
新增,a的后面可以接字符串,而这些字符串会在新的一行出现,目前的下一行
c:
替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行
d:
删除,因为是删除,所以d后面通常不接任何参数
i:
插入,i的后面可以接字符串,而这些字符串会在新的一行,目前的上一行
p:
打印,也就是将某个选择的数据打印出来
s:
替换,可以直接进行替换的工作

文件的格式化以及相关处理
1
格式化打印
printf
'打印内容‘
实际内容
关于C程序语言内,常见的变量格式
%ns
那个n是数字,s代表的是string
%nd
那个n是数字,d代表的是整数
%N.nf
那个n与N都是数字,f代表浮点数
2
文件比较工具diff
diff就是用在比较两个文件之间的区别,并且是行为单位来比较的,一般是用在ASCLL纯文本文件的比较上
diff的用法
diff
[-bBi]
from_file
to_file
-b
忽略一行当中仅有多个空白的区别
-B
忽略空白行的区别
-i
忽略大小写的不同
3
如果我们要将旧的文件升级成为新的文件时,我们可以先利用diff比较出文件的区别,并将区别文件制作成为补丁文件,再由补丁文件更新旧文件即可。
一般来说我们使用diff制作出来的比较文件通常扩展名为.patch
更新:patch
-pN
<
patch_file
还原:patch
-R
-pN
<
patch_file

Ⅳ Linux 从 0 到 1(一) - 终端简介,文件与目录以及相关操作,常用命令

模式:

当打开终端,第一行所见的就叫命令行提示符。我的是这样的:

命令行提示符,顾名思义就是提示在其后面输入命令。在你输入新的一行命令前,这个命令提示符都会出现。分别解析一下上边代表什么意渗绝思:

oscar 这是当前用户的名字。Linux是一个多用户的操作系统,Windows也可以。不过Linux的多用户管理更方便。我们一般建议每个使用Linux系统的用户都创建答喊缺一个属于自己的账户,便于隐私管理。

@ 这个符号我们应该不陌生,我们的电子邮件一般都是 [email protected] 这样的不是吗。这个@就表示英语里的at,是“在...里面,落户在...的,在其中”的意思。@前面是用户名,后面是所在的域。

oscar-laptop 这是当前电脑/操作系统的名字。上面说了在@后面的是一个域,所以 oscar@oscar-laptop 就表示oscar-laptop这台电脑的oscar这个用户。oscar-laptop这个名称在安装此Linux系统时可以任意指定。

: 这是分隔符,没有什么特别的涵义。

~ 这是当前所在目录的名字,会随着用户进入不同目录而改变。~表示当前用户的家目录,有点类似Windows系统的“我的文档”这个目录。

$ 指示你所具有的权限的字符。在Linux系统中有两种可能:

因此, oscar@oscar-laptop:~$ 的意思就是:
你目前是以oscar这个用户登录;你的电脑名称为oscar-laptop;你目前位于 ~ 目录下,就是你的用户家目录。你是普通用户,拥有有限的权限。

参数里可以包含多个参数,由空格隔开,也可以包含数字,字母,等等。可以说,参数没有固定的格式,但是一般来说还是遵循一定的规范的。

如果我们要一次加好几个短参数,可以用空格隔开,例如:

多个短参数也可以合并在一起,例如上面的命令等价于:

请注意:参数的字母的大小写是有区别的,大写的T和小写的t通常表示不同意思。

如果有多个长参数,是不能像多个短参数那样合并写的。而是只能以空格隔开,例如:

当然我们也可以组合使用短参数和长参数,例如:

有时候,同一个意义的参数有短参数和长参数两种形式,效果是一样的,可以任选哪一种。

有一些参数你还需要给它赋一个值才行。而且短参数和长参数的赋值的方式不尽相同。
例如,短参数赋值,通常是这样的:

表示把10赋值给p参数。

如果是长参数,则一般是这样赋值:

长参数的方式更加容易理解,但是不如短参数那么简洁。

正如我们说过的,参数的形式没有绝对的准则。我们上面给出的规则是一般的,有些命令的参数格式可能是我们没怎么见过的。

有些参数就不一样,而且取决于命令。例如对于 ls 这个命令,假如后面带了一个参数,这个参数是一个目录的路径名的话,那么就会列出此目录下的文件。

两种类型的文件

简单起见,我们把Linux下的文件分为两大类:

在一个文件系统中,我们总有一个被称为根目录的东西,这个根目录里包含了所有其他目录和文件。Linux中有且只有一个根目录,就是

是的,就是用一个斜杠表示。没有比根目录再高一阶的目录了,因为没有目录包含根目录,根目录就是Linux最顶层的目录。

Linux系统安装后,包含了很多的文件和目录(虽然其实都是文件),我们很容易迷失在“茫茫文海”中。

当然我们不可能一下子列出Linux中的所有文件,那不现实。但是我们可以向你展示如何在Linux的目录树中来回穿梭,你可以知道此刻你位于哪个目清辩录下。就好比能看懂Linux这个很大的“地图”。

pwd 是英语Print Working Directory的缩写,表示“打印当前工作目录”。

which 命令:获取命令的可执行文件的位置,which命令用于显示一个命令的对应的可执行程序的位置。可能听起来有点拗口。

在Linux下,每一条命令其实对应了一个可执行程序。我们在终端中输入命令,再按回车的时候,其实就是执行了对应的那个程序。比如说,pwd命令对应的pwd程序就是存在于Linux中的。

which命令接受一个参数,也就是你想要知道其可执行程序位于哪里的那个命令。

我们来测试一下,就拿pwd命令来测试好了:

得到:

因此,pwd命令对应的pwd这个可执行程序位于/bin目录中。

我们也可以注意到Linux中的可执行程序和Windows中不太一样,在Windows中可执行程序一般以.exe结尾,而Linux中一般是没有后缀名的。

Linux中的可执行程序也不是都位于相同目录的。我们可以来测试一下which命令本身对应的可执行程序位于哪里:

我们可以看到,which命令对应的可执行程序which并不位于/bin中,而是在/usr/bin中。

Ubuntu的终端默认是有颜色标注的,一般来说:

如果在你的终端里没有标明颜色,那么你可以加上参数 --color=auto 来开启颜色标注。如下:

如果你不需要颜色标注,那么可以用 --color=none 来关闭颜色标注。如下:

当然,为了避免每次都输入这么一串额外的参数,其实我们可以在一个配置文件里修改,使得永久显示颜色或不显示颜色。

在Linux,以点( . )开头的文件是隐藏文件,不过这里不包括开头的两个 . 和 .. ,这两个的含义如下:

- . (一个点)表示当前目录。在当前情况下,就是 /home/oscar 。

- .. (两个点)表示上一级目录。因为当前目录是/home/oscar,所以上一级目录就是 /home 。

我们有一个大写的参数 -A,它的作用和小写的-a几乎一样,唯一不同就是-A不列出 . 和 .. 这两个文件。

-l 这个参数算是ls命令最常用的了。加上-l参数使得ls命令列出一个显示文件和目录的详细信息的列表。

当我们仅用ls -l时,列出的文件详细信息中,文件的大小是以字节为单位的。有时这不是太直观。我们可以再加一个参数-h,h是humain readable的缩写,表示“适合人类阅读的”。所以我们的命令变成了:

t是time的缩写。

命令也是很有用的,因为它可以让我们知道文件和目录所占的空间大小。

虽然ls -l命令也可以显示文件和目录的大小,但是命令统计的才是真正的文件大小。命令会深入遍历每个目录的子目录,把所有文件的大小都做一个统计。

是英语disk usage的缩写,表示“磁盘使用/占用”。

我们的命令也可以使用参数。

cat命令和less命令:显示文件内容,这两个命令只能显示文件内容,并不能对文件内容进行修改。

一次性显示文件的所有内容,如果你想要在显示的文件内容上加上行号,那么你可以加上 -n 这个参数。

分页显示文件内容

head命令和tail命令:显示文件的开头和结尾。

显示文件开头,默认情况下,head会显示文件的头10行。我们也可以指定显示的行数,用 -n 这个参数:

就会显示文件的头5行。

显示文件结尾。默认情况下,tail会显示文件的尾10行。

我们也可以指定显示的行数,用 -n 这个参数:

就会显示文件的尾5行。

tail命令还可以配合 -f 参数来实时追踪文件的更新:

这样,就会检查文件是否有追加内容,如果有,就显示新增内容。

默认地,tail -f会每过1秒检查一下文件是否有新内容。你也可以指定间隔检查的秒数,用 -s 参数:

可以用快捷键 Ctrl + c 来终止tail -f 命令。

touch命令和mkdir命令:创建文件和目录

创建一个空白文件。事实上,Linux没有一个命令是专门用来创建一个空白文件的。touch命令其实一开始的设计初衷是修改文件的时间戳,就是可以修改文件的创建时间或修改时间,让电脑以为文件是在那个时候被修改或创建的。但是touch命令如果后面跟着的文件名是不存在的,那么它就会新建一个。

事实上,我们可以用touch命令同时创建多个文件:

如果我所要创建的文件的名字里有空格怎么办呢?

很简单,加上双引号:

创建一个目录。

mkdir也可以同时创建好几个目录:

如果我所要创建的目录的名字里有空格怎么办呢?

很简单,加上双引号:

我们还可以用 -p 参数来递归创建目录结构。

比如:

cp命令和mv命令:拷贝文件和移动文件

拷贝文件或目录

cp是英语的缩写,表示“拷贝”。所以,顾名思义,此命令用于拷贝。cp命令不仅可以拷贝单个文件,还可以拷贝多个文件,也可以拷贝目录。

复制文件到另一个目录只需要把cp命令的第二个参数换成目录名。

拷贝目录
要拷贝目录,只要在cp命令之后加上-R参数(注意是大写的R)。拷贝的时候,目录中的所有内容(子目录和文件)都会被拷贝。

使用通配符*
*号(星号)是很常用的正则表达式的符号,被称为“通配符”,

所以如果我们用如下命令:

那么就会把当前目录下所有txt文件拷贝到folder这个子目录当中。
又如:

那么就会把当前目录下凡是以ha开头的文件都拷贝到folder目录中。

移动文件

mv是英语move的缩写,表示“移动”。mv命令有两个功能:

用mv命令来移动目录很简单,不需要额外的参数,就跟移动文件一样:

当然,我们也可以使用通配符。

除了移动文件,mv命令还可以用于重命名文件。

事实上,Linux中没有一个专门的命令用于重命名文件。之所以mv命令可以重命名文件,其实还是归因于它的机制:移动文件。经过mv移动之后,原始文件变成了新的名字的文件,文件内容是不变的,这不就相当于重命名了吗?

以上命令会将new_file重命名为renamed_file。

删除文件和目录

rm命令可以删除一个文件,多个文件,目录,甚至你的整个Linux系统(如果你愿意的话)。

以上命令删除当前目录下的new_file_这个文件。
我们也可以同时删除多个文件,只要用空格隔开每个文件即可。例如:

保险起见,用rm命令删除文件时,可以加上 -i 参数,这样对于每一个要删除的文件,终端都会询问我们是否确定删除。i是英语inform的缩写,表示“告知,通知”。

有两种回答:

y:是英语yes的缩写,表示“是”。那么回车确认后,文件就删除了。

n:是英语no的缩写,表示“否”。那么回车确认后,文件不会删除。

如果在rm命令后加上-f参数,那么终端不会询问用户是否确定删除文件,不论如何,文件会立刻被强制删除。

f是英语force的缩写。

以上命令会强制删除file文件。

r是英语recursive的缩写,表示“递归的”。所以使用-r参数,可以使rm命令删除目录,并且递归删除其包含的子目录和文件。

这个命令也挺危险的,用得不好可能你的子目录和文件都没了。

以上命令会删除one这个目录,包括其子目录和文件。

其实,也存在一个命令

看着和 rm -r 挺像的。但是这个命令有个局限性:只能删除空的目录。

创建链接

事实上,Linux下有两种链接类型:

为了区分这两种链接类型的不同,我们首先来谈一谈如Linux这样的操作系统中文件在硬盘上的存放。

文件在硬盘上存储时,大致来说(请注意我用了“大致来说”),每个文件有两部分:

文件名的列表是储存在硬盘的其他地方的,和文件内容分开存放,这样方便Linux管理。

注意:为什么我上面要用“大致说来”呢?因为此处我们简化了描述,其实每个文件有三部分:

我们这里简化地将文件分为两部分:文件名和文件内容。因为我们不想把事情复杂化,我们想要理解两种链接类型的区别,暂时只要知道这些就够了。

每个文件的文件内容被分配到一个标示号码,就是inode。因此每个文件名都绑定到它的文件内容(用inode标识)。原理如下图:

下面我们学习如何创建硬链接和软连接。

比之软链接,硬链接的使用几率小很多。但是我们还是要学习一下,毕竟可能会用到。

硬链接的原理:使链接的两个文件共享同样的文件内容,也就是同样的inode。

所以一旦文件1和文件2之间有了硬链接,那么你修改文件1或文件2,其实修改的是相同的一块内容。只不过我们可以用两个文件名来取到文件内容。

硬链接有一个缺陷:只能创建指向文件的硬链接,不能创建指向目录的硬链接。但是软链接可以指向文件或目录。当然了,事实上,通过一些参数的修改,也可以创建指向目录的硬链接,但是比较复杂,这里不再详述。所以对于目录的链接,我们一般都是用软链接。

硬链接原理图:

要创建硬链接,直接用ln命令,不加任何参数:

我们可以用ls -i命令查看一下(-i参数可以显示文件的inode)。对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上被删除。

我们用ls -l命令查看文件信息的时候,第二列的那个2,其实是表示拥有相同inode号的文件数。不难理解,因为它们指向相同的文件内容,所以共享一个inode。

这个第二列的数字,一般来说对于普通文件,都是1,因为不同文件inode不同嘛。对于目录来说,这第二列的数字标明目录内所含文件数目。

其实,软链接才是真正像我们在Windows下的快捷方式的,其原理很相似。

创建硬链接是ln不带任何参数,但是要创建软链接需要加上-s参数。s是symbolic(符号的)的缩写。

file2指向的不再是file1的文件内容(和硬链接不同),而是指向file1的文件名。

软链接原理图:

用ls -l命令查看一下,会发现形式和之前的硬链接不一样噢,file2的信息是这样的: file2->file1,表示file2指向file1。

而且file2前面的权限那里的第一个字母变成了l,表示link(链接)。之前硬链接的时候是没有l的,硬链接外表看起来就和普通文件类似。

我们用ls -l命令查看文件信息的时候,第二列的那个1,表示拥有相同inode号的文件数。不难理解,因为file2指向file1,它们并没有指向同一块文件内容,所以它们的inode号不相同。

软链接的特点:

Ⅳ 求批量正则表达式修改文件名的命令。windows/linux都OK

forfnamein`ls`
do
newname=`echo$fname|sed's/999/001/;s/html$/png/'`
echo$newname
mv$fname$newname
done

Ⅵ linux下开发脚本搜索子目录批量更改文件名

前言
本文主要给大家介绍了关于Linux shell用sed批量更改文件名的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
示例

去除特定字符
目标:将 2017-01-01.jpg、2018-01-01.jpg 改为 20170101.jpg、20180101.jpg

方法:将所有 - 替换为空
for file in `ls | grep .jpg`
do
newfile=`echo $file | sed 's/-//g'`
mv $file $newfile
done

这里使用sed进行标准输出的字符串替换,其通用格式如下:
stdout | sed 's/pattern/replace/'

上述示例中,在末尾添加g用于替换所有匹配项,而不仅仅替换第一个匹配项。
中间插入字符
目标:将 book01.txt、paper02.txt 改为 book-01.txt、paper-02.txt
方法:用分组匹配分别获取待插入位置两侧的字符串,再通过反向引用实现替换
for file in `ls | grep .txt`
do
newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`
mv $file $newfile
done

分析

上述示例首先通过 ls 和 grep 命令得到待改名的文件列表,然后用 sed 命令进行字符串的替换,最后再使用 mv 命令来完成文件名的更改。
获取待改名文件列表的方法有很多,可以通过 find 命令,也可以直接给出字符串,我们将在下文中提到。
注意 for 循环后面的 ls | grep .txt,这条命令用两个反单引号括了起来,与 $(ls | grep .txt) 的作用相同,被包围的字符串会被当作命令执行,然后返回字符串结果。
文件名包含空格的解决方法
我们可以直接将文件列表写到 for 循环中,而不是通过命令来得到,例如:
for file in "file1 file2 file3"
do
...
done

可以看到 for 循环是通过空格来分割字符串,因此如果待更改的文件名中包含空格的话,就会被拆分成多个文件名,从而出错。
要解决这个问题,我们可以将 IFS(内部字段分隔符)设置为换行符 \n,这样一来,for 循环就会按行来获取变量的值,确保每次获取的确实是一个完整的文件名。
设置 IFS 变量的命令需要放在 for 循环之前:
IFS=$'\n'
for file in `ls`
do
...
done

也可以直接使用 while read 命令一次读取一行到变量 file 中:
ls | grep "*.txt" | while read file
do
...
done

使用 find 获取文件列表
之前的示例中,我们是通过 ls 命令来获取文件列表。该命令只能获取某个目录的文件,而且没法进行多种条件的筛选。
而一说到文件的查找,不得不提到功能强大的 find 命令。该命令可以在多个层次的目录中查找文件,并能够设定诸如创建时间、文件大小、所有者等多种条件,查找起文件来特别方便灵活。
用 find 命令来获取文件列表,再用 sed 命令配合正则表达式来修改文件名,这两个命令的结合几乎能完成所有常见的批量改名任务。
例如,将所有大于1M,且后缀为txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名为 20170101-book.txt、20170101-image.jpg,代码如下:
for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"`
do
newfile=`echo $file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'`
mv $file $newfile
done

Ⅶ Linux如何使用正则表达式命令文本文件操作命令

Linux对文本操作命令及正则表达式:

cat

cat 是 concatenate 的缩写,所以它的作用其实是连接文件。但默认情况下它会将连接文件的结果送到标准输出。所以我们常用来显示文件内容。类似于 dos 中的 type。

more

当一个文件的内容超过一屏后,我们可以用 more 这个指令来逐屏 察看 文件内容。

less

less 在 more 的基础上,更可以逐行 察看 ,前后翻页。

head

head 显示文件开头部分内容,默认显示前十行参数 --lines 或者 –n 指明显示行数基本格式:

tail

tail 显示文件结尾部分内容,命令用法同 head,参数 -f 显示文件的纪实更新,用于监视日志文件

tail 默认显示文件列表中每个文件的后 10 行,如果没有文件名或文件名为“-”则其从标准输入中读取文件,如果有多个文件则其会在文件前面加上“==>文件名<==”以便区别。

# tail /etc/mail/sendmail.mc 默认查看文件的后 10 行内容

# tail –n 20 /etc/passwd 查看文件后 20 行内容

注意: # tail –f /var/log/message 实时监控日志文件更新信息,非常重要

diff

diff 用于比较两个文件之间的区别,并送到标准输出。输出时先报告两个文件的哪一行不同。基本格式:

参数:

uniq 用于去除文本中相邻的重复行。

-u 参数可以只显示那些没有被重复过的行。 -d 显示有被重复过的行。

cut

cut 可以根据一个指定的标记(默认是 tab)来为文本划分列,然后将此列显示。使用权限:所有使用者

基本格式: cut -cnum1 -num2 filename

说明:显示每行从开头算起 num1 到 num2 的文字。

[root@uplooking root] $ cut –f1 –d: /etc/shadow 表示以 : 为分隔符,显示 /etc/shadow 的第一列 sort

sort 用来按各种需要重新排列文本,一般运用在一个管道之后。例如:

默认情况下 sort 按照字母顺序排列文本。

wc

wc 用来统计一个文件的行数、词数、字数并送到标准输出。也可以用-l(行数)、-w(词数)、-c(字数)来指定输出内容。

阅读全文

与linux正则重命名文件相关的资料

热点内容
51虚拟机的文件管理在哪里 浏览:13
win10系统有没有便签 浏览:722
java引用传递和值传递 浏览:109
oracle下载安装教程 浏览:854
php筛选数据库 浏览:830
怎么用手机看wlan密码 浏览:745
奥维地图导入的文件在哪里 浏览:364
sdltrados2014教程 浏览:43
培训制度文件在哪里找 浏览:601
勒索病毒防疫工具 浏览:861
win10c不能打开 浏览:375
xfplay影音先锋苹果版 浏览:597
两个文件打开两个word 浏览:921
苹果6s桌面图标轻微抖动 浏览:326
如何删除手机中看不见的临时文件 浏览:469
安卓412原生锁屏apk 浏览:464
书加加缓存文件在哪里 浏览:635
dock是word文件吗 浏览:267
社保公司新办去哪个网站下载资料 浏览:640
三维标注数据怎么填写 浏览:765

友情链接