300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Linux系统中常用的shell命令(文件目录操作)

Linux系统中常用的shell命令(文件目录操作)

时间:2022-10-07 11:22:21

相关推荐

Linux系统中常用的shell命令(文件目录操作)

Linux系统中常用的shell命令(文件目录操作)

在多文件中查找关键词的位置

grep -r --include=*.* quota ~/workspace/thanos_nlu/models/grep -r --include="." <key_words_to_search> <path_to_search>其中-R, -r, --recursiveRead all files under each directory, recursively; this is equivalent to the -drecurse option.

批量修改文件名

通过 man rename 命令可以得知,rename 命令其实是一个 Perl 脚本命令, 它专用于批量地给多文件重命名(rename multiple files)。

rename 命令格式: rename [ -v ] [ -n ] [ -f ] perlexpr [ files ] perlexpr 是一种 Perl 脚本格式的正则表达式。参数:-v, --verbose Verbose: print names of files successfully renamed.详细模式:打印成功更改的文件名列表-n, --no-act No Action: show what files would have been renamed.测试模式:并不真正的执行命令,而只是显示哪些文件名应该怎么进行更改,用于测试模式。-f, --force Force: overwrite existing files.强制模式:在更改文件名,如果更改后的文件已经存在时覆盖已经存在的文件。

rename 的典型应用

批量更改文件扩展名

$ ls 1.txt 2.txt 3.txt 4.txt $ rename 's//.txt//.ext/' * $ ls 1.ext 2.ext 3.ext 4.ext

批量删除文件扩展名

$ ls 1.txt 2.txt 3.txt 4.txt $ rename 's//.txt//' * $ ls 1 2 3 4

批量添加文件扩展名

$ ls 1 2 3 4 $ rename 's/$//.txt/' * $ ls 1.txt 2.txt 3.txt 4.txt

按自己的方式批量重命名文件

$ ls 1.ext 2.ext 3.ext 4.ext $ rename 's/(/d)/file$1/' * $ ls file_1.ext file_2.ext file_3.ext file_4.ext

递归删除目录下所有exe文件

一次性删除某目录及其子目录下所有的exe文件。

$ find . -name '*.exe' -type f -print -exec rm -rf {} \;

一次性删除某目录及其子目录下所有的csp329_命名开头的文件。

$ find . -name 'csp329_*' -type f -print -exec rm -rf {} \;

注释:

“.” 表示从当前目录开始递归查找" -name ‘*.exe’ "根据名称来查找,要查找所有以.exe结尾的文件夹或者文件" -type f "查找的类型为文件“-print” 输出查找的文件目录名最主要的是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录之后执行该命令。exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一 个\,最后是一个分号

linux 下查找大于100M的文件

$ find . -type f -size +100M

Linux系统下查找大文件或目录

当硬盘空间不够时,我们就很关心哪些目录或文件比较大,看看能否干掉一些了,怎么才能知道呢?以易读的格式显示指定目录或文件的大小,-s选项指定对于目录不详细显示每个子目录或文件的大小

$ du -sh [dirname|filename]

当前目录的大小:

$ du -sh .

当前目录下个文件或目录的大小:

$ du -sh *

显示前10个占用空间最大的文件或目录:

$ du -s * | sort -nr | head

Linux系统下移动大量文件

$ find ./ -name '__*.wav' | xargs mv --target-directory=./wav/

Linux 系统下删除大量文件(递归)

$ find /data/ -name "*_part_*.txt" | xargs rm -rf

批量将目录下所有文件进行 dos/unix 格式转换

# dos --> unix$ find . -type f -name "*.txt" | xargs sed -i 's/\r$//g'$ find . -type f -name "*.xml" -exec sed -i 's/^M$//g' {} \;# unix --> dos$ find . -type f -name "*.txt" | xargs sed -i 's/$/\r\n/'

批量删除目录下所有文件空行

# 只删除空行$ find . -type f -name "*.xml" -exec sed -i '/^\s*$/d' {} \;# 删除纯空行和由空格组成的空行$ find . -type f -name "*.xml" -exec sed '/^[ ]*$/d' {} \;

统计一个目录下所有文件的文本行数

# 统计目录下所有文件的文本行数$ wc -l $(find . -type f -maxdepth 1)# 统计目录下指定文件后缀的文本行数$ wc -l $(find . -name "*.txt")# 统计目录下指定多个文件后缀的文本行数# 以.h、.C文件为例$ wc -l $(find . -name "*.h" -o -name "*.C")# 统计包含某个字段的目录下包含某个字段的文件名文件的非空文本行数$ find ./`ll | grep _某个字段 | tail -1| awk '{printf $9}'`/result/ -name "*.csv" | xargs grep '^.' | wc -l# 备注: find 命令中 -a, -o, -not 的使用-a连接两个不同的条件(两个条件必须同时满足)$ find /tmp -name "*.sh" -a -user root-o连接两个不同的条件(两个条件满足其一即可)$ find /tmp -name "*.sh" -o -user root-not 对条件取反的$ find /tmp -not -user root

查找在系统中为空的文件或者文件夹

# 查找空文件或者文件夹 $ find / -empty

删除大文件里指定行

# 删除包含特定字符("xxx")的行$ sed -i '/xxx/d' filename# 删除第N行$ sed -i 'Nd' filename# 删除第N~M行,file的[N,M]行都被删除$ sed -i 'N,Md' filenamesed -i "${row0},${row1}d" filename# 这里引号必须为双引号# 删除最后一行$ sed -i '$d' filename# 补充 sed命令常用到的两个选项:#-i : 直接在文件上编辑 (edit files in place)#-e[默认选项]:只在命令行输出,而文件不改变# (add the script to the commands to be executed)

UTF-8(with BOM)与UTF-8相互转换

# UTF-8(with BOM)转UTF-8## 对某个文件$ sed -i '1 s/^\xef\xbb\xbf//' filename## 对某个目录$ find ${path} -type f -name "*" -print | xargs -i sed -i '1 s/^\xef\xbb\xbf//' {}# UTF-8转UTF-8(with BOM)## 对某个文件$ sed -i '1 s/^/\xef\xbb\xbf&/' filename## 对某个目录$ find ${path} -type f -name "*" -print | xargs -i sed -i '1 s/^/\xef\xbb\xbf&/' {}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。