1、文件管理
更新于:2024年3月3日
文件类
目录
[toc]
tree命令
tree命令可以以目录树的形式显示指定(默认显示这个文件系统)目录的所有文件夹和文件。
- 安装:
yum install -y tree
- 使用方法
$ tree folder
案例:tree命令测试
[root@hg-linux-test ~]# tree test
test
├── 1.txt
├── 2.txt
└── test
1 directory, 2 files
[root@hg-linux-test ~]#
案例:解决tree命令显示中文乱码问题 -N
2023年12月16日(已解决)
但是,默认情况下,tree命令无法显示中文文件或文件夹名,会是一串转义字符。这时可以用选项-N来显示中文文件名:
$ tree -N folder
- 测试过程
默认情况下,tree命令无法显示中文文件或文件夹名,会是一串转义字符。
这时可以用选项-N来显示中文文件名:
find命令
查找文件命令
linux find命令使用案例?
find
是Linux中强大且广泛使用的命令,用于在指定目录及其子目录中搜索文件和目录。以下是一些find
命令的使用案例:
-
查找特定文件名:
-
在当前目录及其子目录中查找名为 “filename.txt” 的文件:
find . -name "filename.txt"
-
==在指定目录 (“/path/to/dir”) 及其子目录中查找名为 “filename.txt” 的文件:==
find /path/to/dir -name "filename.txt"
-
-
根据文件类型进行查找:
-
查找所有普通文件(非目录、链接等):
find . -type f
-
查找所有目录:
find . -type d
-
查找所有符号链接文件:
find . -type l
-
-
根据文件大小进行查找:
-
查找大于100MB的文件:
find . -size +100M
-
查找小于1KB的文件:
find . -size -1k
-
-
结合多个条件进行查找:
-
查找名为 “filename.txt” 并且文件大小大于1MB的文件:
find . -name "filename.txt" -size +1M
-
查找以 “.txt” 结尾的文件并且最近7天内修改过的文件:
find . -name "*.txt" -mtime -7
-
-
执行操作:
-
对查找到的文件执行特定的操作,如打印文件名:
find . -type f -exec echo {} \;
-
删除所有以 “.txt” 结尾的文件:
find . -name "*.txt" -delete
-
这些只是find
命令的一些常见用例,实际上它还有更多的选项和功能。您可以通过运行man find
命令来查阅完整的find
命令的文档和更多的示例。
find里可以使用通配符,例如*吗?
是的,find
命令支持使用通配符(如星号 “*”) 进行模式匹配,以便更灵活地搜索文件和目录。下面是几个示例:
-
查找以 “.txt” 结尾的文件:
find . -name "*.txt"
-
查找以 “file” 开头并以 “.csv” 结尾的文件:
find . -name "file*.csv"
-
查找名称中包含 “keyword” 的文件:
find . -name "*keyword*"
需要注意的是,在使用通配符进行模式匹配时,确保通配符被引号括起来,以确保通配符在运行之前被find
命令解释,而不是由shell解释。
另外,find
命令也支持其他模式匹配选项,如?
表示匹配单个字符,[]
表示匹配字符集合等。您可以参考find
命令的文档或使用man find
命令了解更多关于模式匹配的详细信息和示例。
案例:在指定目录查找特定文件名
==在指定目录 (“/path/to/dir”) 及其子目录中查找名为 “filename.txt” 的文件:==
find /path/to/dir -name "filename.txt"
案例:在指定目录查找某类型的文件
查找以 “.txt” 结尾的文件:
find . -name "*.txt"
案例:在指定目录查找某类型的文件(==或功能==)
find里通配符可以使用或吗?
在find
命令中,通配符本身是不能用于表示逻辑 “或” 的,但您可以使用 -o
选项来实现类似的功能。下面是一个示例:
假设您想要查找以 “.txt” 或 “.csv” 结尾的文件,您可以使用 -name
选项和 -o
选项结合起来使用:
find . \( -name "*.txt" -o -name "*.csv" \)
上述命令中,使用圆括号 \(
和 \)
来分组两个条件,然后使用 -o
表示逻辑 “或”。
请注意,在使用 \(
和 \)
进行分组时,需要对它们进行转义,以防止它们被shell解释。同样,通配符也需要用引号括起来,以避免被shell提前展开。
希望这个解释能够帮助到您!如果您还有其他问题,请随时提问。
案例:对如何find命令找出的文件执行特定的操作?
find
命令是Linux和Unix系统中一个非常强大的工具,用于基于各种条件搜索文件系统中的文件。你可以将find
命令的输出与其他命令结合使用,以对找到的文件执行特定的操作。这通常通过使用-exec
选项或将find
命令的输出通过管道传递给xargs
命令来实现。
使用-exec
选项
-exec
选项允许你为find
命令找到的每个文件执行一个命令。命令的语法如下:
find [搜索路径] [选项] -exec [要执行的命令] {} \;
这里,{}
是一个占位符,代表当前找到的文件名;\;
是命令的结束标志。
例如,如果你想要找到当前目录及子目录下所有的.txt
文件,并删除它们,你可以使用:
find . -type f -name "*.txt" -exec rm {} \;
如果你想要为找到的每个文件执行更复杂的命令或多个命令,可以使用sh
或bash
作为-exec
参数。例如,打印每个找到的文件名并删除这些文件:
find . -type f -name "*.txt" -exec sh -c 'echo "Deleting file: {}"; rm {}' \;
使用xargs
命令
另一种方式是使用xargs
命令。xargs
可以从标准输入接收数据,并将这些数据作为参数传递给指定的命令,这使得xargs
与find
命令配合非常有效。
例如,删除当前目录及子目录下所有的.txt
文件:
find . -type f -name "*.txt" | xargs rm
xargs
默认以空格为分隔符将输入分割成多个参数,对于包含空格、引号或其他特殊字符的文件名,可以使用find
命令的-print0
选项和xargs
的-0
选项,以null字符作为记录的终止符,从而安全地处理这些文件名:
find . -type f -name "*.txt" -print0 | xargs -0 rm
使用xargs
执行复杂命令时,可以结合使用sh
或bash
:
find . -type f -name "*.txt" -print0 | xargs -0 -I {} sh -c 'echo "Deleting file: {}"; rm {}'
这里,-I {}
选项指定了一个替换字符串,该字符串在xargs
将要执行的命令中被每个输入项替换。
不管是使用-exec
还是xargs
,都能有效地将find
命令与其他命令结合起来,对找到的文件执行各种操作。选择哪种方法取决于你的具体需求以及你觉得哪种方法更方便。
实际测试案例
find /root/rsync/site -name "*.html"
find /root/rsync/site \( -name "*.html" -o -name "*.png" \)
find /root/rsync/site \( -name "*.html" -o -name "*.png" -o -name "*.md" \)
du命令
显示每个文件和目录的磁盘使用空间
du命令 也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
语法
du [选项][文件]
选项
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件 的大小外,同时也显示所有目录或文件的总和。(常用)
-k或--kilobytes 以KB(1024bytes)为单位输出。 (常用)
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。(常用)
-h或--human-readable 以K,M,G为单位,提高信息的可读性。 (常用)
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
-d或者--max-depth 通过 du 的 - d 参数,或 --max-depth,设置查询的目录深度
案例:显示目录或者文件所占空间
1. root@localhost [test]# du
2. 608 ./test6
3. 308 ./test4
4. 4 ./scf/lib
5. 4 ./scf/service/deploy/product
6. 4 ./scf/service/deploy/info
7. 12 ./scf/service/deploy
8. 16 ./scf/service
9. 4 ./scf/doc
10. 4 ./scf/bin
11. 32 ./scf
12. 8 ./test3
13. 1288 .
只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小。
案例:显示指定文件所占空间
1. [root@localhost test]# du log2012.log
2. 300 log2012.log
案例:查看指定目录的所占空间
1. [root@localhost test]# du scf
2. 4 scf/lib
3. 4 scf/service/deploy/product
4. 4 scf/service/deploy/info
5. 12 scf/service/deploy
6. 16 scf/service
7. 4 scf/doc
8. 4 scf/bin
9. 32 scf
案例:显示多个文件所占空间
1. [root@localhost test]# du log30.tar.gz log31.tar.gz
2. 4 log30.tar.gz
3. 4 log31.tar.gz
案例:只显示总和的大小
1. [root@localhost test]# du -s
2. 1288 .
3.
4. [root@localhost test]# du -s scf
5. 32 scf
案例:显示总和的大小且易读 (常用)
[root@ecs1 ~]# du -sh /var/
6.6G /var/
[root@ecs1 ~]#