一、rm 排除指定文件或文件夹
rm -ri !(.git) // 有些系统不支持,勿轻易尝试 ls -a | grep -v '^\.git' |xargs rm -rf // 通过管道流直接操作
操作特殊字符 --
rm -rf -- -r.txt
二、find <指定目录> <指定条件> <指定动作>
$ find . -name 'my*' -ls
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
find /etc -name "*.conf" find /etc ! -name "*.conf" find /etc -type d
b - 块设备文件。 d - 目录。 c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。
三、cut -d {分隔符} -f{第几个}
find *.rmvb | cut -d"." -f1
输出 rmvb 扩展的文件名
四、xargs
将标准输入转为命令行参数。
原因:Unix 命令都带有参数,有些命令可以接受"标准输入"(stdin)作为参数。比如 grep 命令
cat /etc/passwd | grep root
其中 “|” 是管道符,是将一个命令的标准输出管道为另外一个命令的标准输入。grep 接受“标准输入”作为参数。
对于 grep 还可以使用 - 作为参数,从标准输入中读取数据
$ grep hello - hello java
但是 rm 就不支持从标准输入读取
find -name hello* | rm
此时可以使用 xargs 主动将标准输入转换为参数
# -p参数打印出要执行的命令,询问用户是否要执行
find -name "hello*" | xargs -p rm -rf
# -i 将参数替换为 {}
$ ls | xargs -t -i mv {} {}.bak
默认情况下,xargs将换行符和空格作为分隔符,把标准输入分解成一个个命令行参数。
$ echo "one two three" | xargs mkdir
-d 用于指定分隔符
$ echo -e "a\tb\tc" | xargs -d "\t" echo a b c
grep 除了支持标准输入的读取,还可以指定参数,这样将从参数所表示的文件中读取数据。比如下面命令找出所有 TXT 文件以后,grep 将对每个文件搜索一次是否包含字符串
find . -name "*.txt" | xargs grep "abc"
五、grep (global search regular expression(RE) and print out the line
使用正则表达式搜索文本,并把匹配的行打印出来。
grep pattern [file...]
比如:
① 通过管道对 ls -l输出的内容过滤,只显示以 a 开头的行
ls -l | grep '^a'
② 显示在aa,bb,cc 文件中匹配 test的行。
grep 'test' aa bb cc
③ grep -v 排除选择(invert-match)。过滤不以 a开头的行。
ls -l | grep -v '^a'
④ grep -e 排除特殊字符
grep --help |grep -e -v
六、for in 循环
基本格式
for 变量 in 取值列表
do
各种操作
done
比如
for i in {1..100..2}
do
echo $i
done
七、cat 命令
写入文件
cat <<EOF >hello.txt hello java EOF
end