Linux相关命令总结

一 常用命令

1. find

  • 查找空文件

find . -name "*" -type f -size 0c 
  • 查询出所有的空文件夹

find -type d -empty
  • 查询所有/root/下的空文件夹

find /root -type d -empty  
  • 删除所有空文件夹

find -type d -empty | xargs rm -rf   
  • 列出搜索到的文件并删除文件

find ./ -name 'qipa250.log' -exec rm -rf {} \;  
  • 删除前提示

find ./ -name 'qipa250.log' -ok rm -rf {} \;
  • 查找并批量删除文件

find ./ -name '*.log' -exec rm -rf {} \;
  •  根据文件时间查找

Linux文件系统中每一个文件都有三种时间戳
访问时间(-atime):用户最近一次访问文件的时间;
修改时间(-mtime):文件内容最后一次被修改的时间。
变化时间(-ctime):文件元数据(metadata,例如权限或所有权)最后一次改变的时间。
-atime,-mtime,-ctime作为时间参数,单位是天,可以使用+表示大于,-表示小于。

find . -mtime -6

 

注意

A. {} 内的内容代表前面find查找出来的文件;

 

2. touch 

  • 批量创建文件

touch {1..5}.log

 

 

3. sed

  • 替换文件中的字符
find . -name "*.ann"|xargs grep -lr "查找字符"|xargs sed -i "s/查找字符/替换字符/g"
  • 查找文件中特定字符所在行,并删除行中的特定字符
sed  -i '/特定字符/{s/要删除的字符//g}'  文件名
  • 查找特定字符,并删除字符所在行
sed -ie '/指定字符串/d' 文件名
  • 批量查找特定字符并替换为特定字符
sed -i 's/查找字段/替换字段/g' `grep 查找字段 -rl 查找的目录或者文件`
  • 查找目录或文件中的字段,并使用‘替换字段’替换‘查找字符’
sed -i "s/查找字符/替换字符/g" `grep 查找字符 -rl ./*.ann`
  • 查找文件,并创建同名文件
find data -name '*.txt' | sed -e 's|\.txt|.ann|g' | xargs touch
  •  遍历文件,并删除包含字符串string所在的行
find . -name '*.txt' |xargs sed -i -e '/string/d'

 

4. cp

  • 拷贝文件 
find ./ -maxdepth 1 -type d -exec cp -r filename {} \;

命令解释:

-maxdepth 1 #表示只到第一层子目录。
-type d #表示是目录directory。
-exec #表示执行后面命令。
cp -r filename {} \; #这里的{}表示子目录下的目录名,\;这个表示命令结尾。filename要拷贝的文件。

 

 

5. scp: 利用ssh传输文件

  • 从远程服务器下载文件到本地
scp username@servername:/remote_dir/filename /local_dir
  • 从远程服务器下载整个目录到本地
scp -r username@servername:/remote_dir/dirname /local_dir
  • 上传本地文件到服务器目录下
scp /local_dir/filename username@servername:/remote_dir
  • 上传本地整个目录到服务器目录下
scp -r /local_dir/dirname username@servername:/remote_dir

注:目标服务器要开启写入权限。

 

6 tar

  • 打包
tar  -cvf 归档路径  被打包文件路径。
(c--create archive   v-verbose  f  --file ,f指归档路径,故f必须放在其他选项之后,而且-可省略不写)


单独打包命令:  tar -cvf 归档路径 被打包路径.  (整体文件变大,后缀一般是.tar)
gzip压缩命令:     tar -zcvf 归档路径 被打包路径.  (gun-zip压缩,后缀一般是.tar.gz)
bzip2压缩命令:   tar -jcvf  归档路径 被打包路径.  (bzip2压缩,后缀一般是.tar.bz2)

e.g.

tar -cvf test.tar a b c d  ---将文件abcd打包为test.tar
tar -zcvf test.tar.gz a b c d     ---打包并gzip压缩
tar -jcvf test.tar.bz2 a b c d  ---打包并bzip2压缩
  • 解压

拆包时有同名文件会直接覆盖,tar打包的都可拆,加不加z .j都可。但如果加了z或j,就只能拆对应的zip或bzip2格式的包.

拆包命令:(-x 拆包 -C 指定解压路径)

tar -xvf 归档文件路径   ---可拆tar/gzip/bzip2格式的包
tar -zxvf 归档文件路径   ---只可拆gzip格式的包
tar-jxvg 归档文件路径    ---只可拆bzip2格式的包
unzip  test.zip                                  --拆zip格式的包
# 解压到指定位置的命令:
tar -xvf  test.tar  -C  /tmp --解压指定位置:到/tmp里,加-C (C --change dir.)
#另外:选项中-可省略,v和省略.故可以:
tar  xvf  test.tar    ----或者 ----tar  xf  test.tar

 

二 高级操作

1. 批量拷贝文件并修改文件名

 find ./ -type f -name "*.log" -exec bash -c 'cp "$0" "${0/log/txt}"' {} \;

命令解析:

  • find ./ -type f -name "*.log" : 在当前文件夹下查找所有‘.log’文件
  • -exec 对find查找的结果执行-exec 之后的命令
  • {} 表示find查找的结果。The results placeholder is denoted by two curly braces {}.
  • \; 分隔符,表示-exec 之后的参数到此结束
  • bash -c 'cp "$0" "${0/log/txt}"' {} 其中bash表示启动一个子程序使用新的bash, 父程序就是当前bash; '-c' 后面是字符串'cp "$0" "${0/log/txt}"'为在新bash子程序里执行的命令;find的结果{}作为一个参数传入新的子程序即为 ‘$0’

2. 批量重命名文件后缀名

注意:这里是递归修改,会修改目录及子目录所有文件,.c文件改为.h文件。

 find ./ -name "*.c" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.c  ./{}.h

 

posted @ 2022-05-27 15:57  IllidanStormrage  阅读(35)  评论(0编辑  收藏  举报