Linux 文件名匹配
As the shell reads each line, it "handles" any special characters. This includes variable evaluation (variables start with a "$)," and filename expansion. Expansion of filenames occurs when the characters "*," "?," or "[" occur in a word. A question mark matches a single character. An asterisk matches any number of characters, including none. Square brackets are used to specify a range or particular combination of characters. Inside square brackets, a hyphen is used to specify a range or characters. Also, if the first character inside the square brackets is an exclamation point, the complement of the range is used. Let me give some examples:
| Table 1 | |
|---|---|
| Examples of Bourne shell filename expansions | |
| Pattern | Matches |
| * | Every file in the current directory |
| ? | Files consisting of one character |
| ?? | Files consisting of two characters |
| ??* | Files consisting of two or more characters |
| [abcdefg] | Files consisting of a single letter from a to g. |
| [gfedcba] | Same as above |
| [a-g] | Same as above |
| [a-cd-g] | Same as above |
| [a-zA-Z0-9] | Files that consist of a single letter or number |
| [!a-zA-Z0-9] | Files that consist of a single character not a letter or number |
| [a-zA-Z]* | Files that start with a letter |
| ?[a-zA-Z]* | Files whose second character matches a letter. |
| *[0-9] | Files that end with a number |
| ?[0-9] | Two character filename that end with a number |
| *.[0-9] | Files that end with a dot and a number |
As you can see, the dot is not a special character. Filenames may or may not have a dot. UNIX Programers use the dot to standardize on the type of source code of each file, but that is just a convention. There is another convention, which concerns the shell:
正如你所看到的,dot不是特殊字符,文件名可有可无dot。unix程序员习惯使用dot来标准化源代码的文件
- Files whose name starts with a dot are not normally listed.
- 以dot开头的文件不列出。
Again, it is a convention, but ls, find and the various shells follow this convention. This allows some files to be "secret," or perhaps invisible, by default. You must explicitly ask for these files, by including the dot as part of the filename. The pattern ".*" matches all hidden files.
我使用ls .* 效果:
/home/sumng/Documents/sh Documents下面有一个.secret文件。
ms@sumng-VirtualBox:~/Documents$ ls .*
.secret .:
file1 find sh test1 () test1zip test2.txt test3.txt
file1~ new3 test~ test1 () test1.zip test2.zip
file1.zip rm test1 test1.txt test2 test3 ..:
Desktop examples.desktop Pictures suming.txt Videos
Documents hello.txt printf.sh Templates
Downloads Music Public Ubuntu One
可有看到除了把.secret显示除了,也把Documents下其他文件显示了,因为其他文件是在当前目录,也是以dot开头,也把上级目录显示
出来了。)
Remember that two hidden files are always in every directory, ".," which indicate the present directory, and "..," which indicates the directory above the current directory. If you want to match all hidden files except these two directories, there is no easy way to specify a pattern that will always match all files except the two directories. I use
- .??
or
- .[a-zA-Z]*
As I said, this does not match all combinations, but works most of the time. Hackers (or crackers, if you prefer) break into computers and often use strange filenames, like ". " or ".. " to hide their traces. You may not have noticed, but there was a space in these filenames. Refering to files with spaces in the names require quoting, which I will cover later. Personally, all of my hidden files are matched by ".[a-z]*" and all of my hidden directories are matched by ".[A-Z]*." This works because I made up my own convention, and always follow it.
The slash is also special, as it is used to indicate a directory path. Filename expansion does not expand to match a slash, because a slash can never be part of the filename. Also, the same rules for filename expansion of hidden files applies if the pattern follows a slash. If you want to match hidden files in a subdirectory, you must specify the explicit pattern. Table 2 lists some examples.
斜线也是特殊的,用来预示一个目录,文件匹配不会匹配一个slash。因为slash永远不是filename 的一部分。
| Table 2 | |
|---|---|
| Filename Expansion with directories | |
| Pattern | Matches |
| * | All non-invisible files |
| abc/* | All non-invisible files in directory abc |
| abc/.* | All invisible files in directory abc |
| */* | All non-invisible files in all subdirectories below |
| */.* | All invisible files in all subdirectories below |
Filename expansions are based on the current directory, unless the filename starts with a slash.
The Bourne shell differs from the C shell if the meta-characters do not match any file. If this happens, the pattern is passed to the program unchanged. (The C shell will either do this, or generate an error, depending on a variable).
If you are not sure how something will expand, use the echo command to check. It generates output more compact than ls, and it will not list contents of directories like ls will. You will also notice the output is sorted alphabetically. The shell not only expans filenames, but sorts them, for all applications.
转自:http://www.grymoire.com/Unix/Sh.html
Linux 文件名匹配的更多相关文章
- Linux文件名匹配和输出重定向--2019-4-24
1.文件名匹配 例:rm *.bak; 删除结尾是.bak的文件 rm *4*.bak; 删除名称中有“4”的.bak文件 ls *.????; 查找结尾是“.”后有四个字母的文件 2.管道 先进 ...
- linux文件名匹配——通配符使用
背景:在linux使用过程中,经常需要查找文件,对命令中的通配符pattern和正则表达式的区分不是很清楚.有必要好好研究一下. 1 扫盲 1.1 通配符和正则表达式 当在使用命令行时,有很多时间都用 ...
- linux文件名匹配
* 匹配文件名中的任何字符串,包括空字符串. ? 匹配文件名中的任何单个字符. [...] 匹配[ ]中所包含的任何字符. [!...] 匹配[ ]中非感叹号!之后的字符. 如: s* ...
- Linux文件名小写的好处(转)
说明:来自老阮的<为什么文件名要小写>的文章,其实我觉得应该说是<Linux文件名为什么要小写>会更合适些. 一.可移植性 Linux 系统是大小写敏感的,而 Windows ...
- linux文件名乱码时删除或改名的方式(转载)
转自:http://www.linuxsa.cn/when-linux-file-name-topsy-turvy-deleted-or-renamed.html linux文件名乱码时删除或改名的方 ...
- iconv内容,convmv文件名,unix2dos,dos2unix文件格式转换,od/cut/wc/dd/diff/uniq/nice/du等命令,linux文件名乱码,文件名,文件内容,vim编码设置
1.enconv文件名编码转换,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下 enconv -L zh_CN -x UTF-8 filename enconv -L GB2312 -x ...
- linux文件名乱码解决办法
1.linux解压压缩文件乱码 unzip -O CP936 xxx.zip 2.一般文件用convmv sudo convmv -f gbk -t utf-8 -r --notest /your_d ...
- 正则表达式-linux路径匹配
转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9860994.html 需求 注:此正则只用于规范linux路径格式. linux路径支持很多的特殊字符,但是 ...
- linux查看匹配内容的前后几行(转)
linux系统中,利用grep打印匹配的上下几行 如果在只是想匹配模式的上下几行,grep可以实现. $grep -5 'parttern' inputfile //打印匹配行的前后5行 ...
随机推荐
- 大型分布式C++框架《四:netio之buffer管理器 下》
每周一篇又来了.这次主要介绍netio的buffer管理器. 首先buffer管理是每一个网络层不可回避的问题.怎么高效的使用buffer是很关键的问题.这里主要介绍下我们的netio是怎么处理.说实 ...
- Storm实现单词计数
package com.mengyao.storm; import java.io.File; import java.io.IOException; import java.util.Collect ...
- 【转】windows下vs2008/2010+opencv2.2开发环境搭建
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.下载安装Cmake 2.用cmake配置opencv2.2,然后编译,安装 3. 在vs2008中配置opencv2.2 4.Demo 1.下 ...
- SQL Server 启用 xp_cmdshell 与bcp 使用
启用 xp_cmdshell 1: sp_configure 'show advanced options',1 2: reconfigure 3: GO 4: 5: sp_configure 'xp ...
- Linux常见面试题
一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 索引节点来标 ...
- I/O输出端口照明LED
方案特点:I/O输出端口照明LED.而区间0.2秒闪烁!(非计时器延迟) (P1.0销被连接到LED) LED EQU P1.0 ;宏定义 ORG 0000H LJMP MAIN ORG 0200H ...
- Ignatius and the Princess III --undo
Ignatius and the Princess III Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (J ...
- QT程序启动界面的使用
当程序的初始化工作比较多,程序可能启动较长时间后,窗口才会显示出来,用户没准会抱怨程序响应的慢. 为了改善用户体验,最好在程序初始化这段时间显示logo,或者其他信息提示用户程序已启动.QT提供了QS ...
- Python字符串方法
capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串 c ...
- Intent 数据传递 总结
系统API 可以传递的数据类型 1.传递8大基本类型+String+CharSequence及其数组类型 2.传递ArrayList集合 public Intent putIntegerArr ...